2017-07-30 30 views
5

के साथ उपयोग करते समय लटकता है यदि मैं एक थ्रेड बनाता हूं जो कुछ करता है तो यह कुछ प्रक्रिया से जुड़ता है और इसकी शीर्ष विंडो प्राप्त करता है, तो प्रोग्राम लटकता है।pywinauto.top_window() का उपयोग करते समय इसे थ्रेड

मैं इसे एक छोटे से डिबग और यह comtypes._compointer_base.from_params में फंस रहा है।

... 
-> self.top_win = self.app.top_window() 
    c:\python27\lib\site-packages\pywinauto\application.py(1095)top_window() 
-> backend=self.backend.name) 
    c:\python27\lib\site-packages\pywinauto\findwindows.py(197)find_elements() 
-> cache_enable=True) 
    c:\python27\lib\site-packages\pywinauto\uia_element_info.py(272)children() 
-> return self._get_elements(IUIA().tree_scope["children"], cond, cache_enable) 
    c:\python27\lib\site-packages\pywinauto\uia_element_info.py(261)_get_elements() 
-> ptrs_array = self._element.FindAll(tree_scope, cond) 
> c:\python27\lib\site-packages\comtypes\__init__.py(970)from_param() 
-> return value 

pdb में कदम लिखने के बाद, यह इस से पता चलता है और फिर जमा: इस पूरे ट्रैस है

(Pdb) s 
--Return-- 
> c:\python27\lib\site-packages\comtypes\__init__.py(970)from_param()-><POINTER... 41308a0> 
-> return value 

ऐसा लगता है कि समस्या धागे के साथ comtypes का उपयोग करने में है, मैं कॉल करने की कोशिश pythoncom.Co आरंभ करें() कॉलिंग थ्रेड (और मुख्य में भी) में लेकिन इससे मदद नहीं मिली।

यहां क्या किया जा सकता है?

धन्यवाद।

+1

हम्म ... अच्छा सवाल। शायद एमएस यूआई ऑटोमेशन में थ्रेडिंग के लिए कुछ नुकसान भी हैं ... यदि आपको उत्तर मिल सकता है, तो यह दो बार उपयोगी हो सकता है क्योंकि हम भविष्य में "रिकॉर्ड-रीप्ले" कार्यान्वयन के लिए कुछ थ्रेडिंग करने की योजना बना रहे हैं। –

+1

एक और बात मुझे संदेह है कि pywinauto केवल एक 'IUIA() 'ऑब्जेक्ट बनाता है (हाँ, यह सिंगलटन है)। मुझे पता है कि यह थोड़े विरोधी पैटर्न है, लेकिन मैंने इसे एक और समस्या के लिए एक समाधान के रूप में बनाया है जो शायद वैसे भी काम नहीं कर रहा है। :) मैं सोचूंगा कि 'iUIA()' प्रति थ्रेड को तुरंत चालू करने या उदाहरणों की अप्रतिबंधित संख्या की अनुमति देने के लिए कैसे ... –

+1

[समस्या # 394] (https://github.com/pywinauto/pywinauto/issues/394) हमारे लिए एक अनुस्मारक है। –

उत्तर

1

pywinauto==0.6.4 डिफ़ॉल्ट रूप से COM ऑब्जेक्ट्स के लिए बहु-थ्रेडिंग मोड (एमटीए) का उपयोग करता है। बस इसे pip install -U pywinauto द्वारा अपग्रेड करें और जांचें कि यह आपके लिए काम करता है या नहीं।

संबंधित मुद्दे

 संबंधित मुद्दे