का केवल एक ही चरण चलाने के लिए संभव है, मैं एसिन्सीओ और टिंकर का उपयोग करके एक साधारण ग्राफिकल नेटवर्क एप्लिकेशन पर काम कर रहा हूं। मैं asyncio इवेंट लूप को Tk के mainloop के साथ संयोजन करने की समस्या में भाग रहा हूं। यदि संभव हो, तो मैं इसे धागे के बिना करना चाहता हूं, क्योंकि इन दोनों पुस्तकालयों (लेकिन विशेष रूप से टिंकर) बहुत धागे सुरक्षित नहीं हैं। वर्तमान में, मैं एक asyncio coroutine है, जो केवल टी घटना पाश की एक एकल पुनरावृत्ति चलाता में Tk.update उपयोग कर रहा हूँ:क्या एसिन्सीओ इवेंट लूप
@asyncio.coroutine
def run_tk(tk, interval=0.1):
try:
while True:
tk.update()
yield from asyncio.sleep(interval)
except TclError as e:
if "application has been destroyed" not in e.args[0]:
raise
हालांकि सभी विकल्प तलाश के हित में, मैं अगर यह संभव हो गया था सोच रहा था रिवर्स करने के लिए- यदि एक टीके कॉलबैक के अंदर एक एसिन्सीओ इवेंट लूप के केवल एक ही पुनरावृत्ति का आह्वान करना संभव था।
आप (https://github.com/python/asyncio/issues/ [asyncio साथ टी मुख्य पाश गठबंधन] कर सकते हैं 21), लेकिन मुझे नहीं पता कि क्या यह आपको अभी भी नेटवर्क यातायात को संसाधित करने की अनुमति देता है (यानी नेटवर्क घटनाएं मुख्य लूप में कैसे चलती हैं)? –
ऐसा प्रतीत होता है कि यह काम करेगा, लेकिन यह धोखा देती है- यह एक TkEventLoop बनाता है, जो अनिवार्य रूप से लूप में 'अपडेट' चलाता है, लेकिन नेटवर्क I/o करने के लिए पारंपरिक ईवेंट लूप भी बनाता है और इसे थ्रेड में चलाता है। यह दोनों दुनिया में सबसे खराब है; एकमात्र फायदा यह है कि प्रत्यक्ष कॉलबैक ('loop.call_later') सीधे ईवेंट इवेंट लूप में आवेदित होते हैं। – Lucretiel
मुझे प्रश्न में और उत्तरों में एक न्यूनतम कामकाजी उदाहरण याद आ रहा है। – buhtz