Форум сайта python.su
Добрый !
Прошу помощи.
Инструменты - Vista SP2 x86, python 3-2-3, pywin32-217, python WMI 1.4.9 . Всё самое свежее
Пытаюсь запустить функцию в потоках.
Простой код (без потока) работает:
import win32com.client def fuu(id): print ('f1') objWMI4=win32com.client.GetObject(r"winmgmts:\\.\root\cimv2") print ('f2') # Main function objWMIServiceLocal=win32com.client.GetObject(r"winmgmts:\\.\root\cimv2") print ('1') fuu(5) print ('2')
import win32com.client import threading def fuu(id): print ('f1') objWMI4=win32com.client.GetObject(r"winmgmts:\\.\root\cimv2") print ('f2') # Main function objWMIServiceLocal=win32com.client.GetObject(r"winmgmts:\\.\root\cimv2") print ('1') t = threading.Thread(target=fuu,args= (5,) ) print ('2') t.start() print ('3')
Exception in thread Thread-1: Traceback (most recent call last): File "D:\Python 3-2-3\lib\threading.py", line 740, in _bootstrap_inner self.run() File "D:\Python 3-2-3\lib\threading.py", line 693, in run self._target(*self._args, **self._kwargs) File "d:\fb-py4-1.py", line 9, in fuu objWMI4=win32com.client.GetObject(r"winmgmts:\\.\root\cimv2") File "D:\Python 3-2-3\lib\site-packages\win32com\client\__init__.py", line 72, in GetObject return Moniker(Pathname, clsctx) File "D:\Python 3-2-3\lib\site-packages\win32com\client\__init__.py", line 87, in Moniker moniker, i, bindCtx = pythoncom.MkParseDisplayName(Pathname) pywintypes.com_error: (-2147221020, 'Синтаксическая ошибка', None, None)
Отредактировано Ace (Сен. 5, 2012 23:03:22)
Офлайн
Кнопочку code на панели бебекодов видишь?
Офлайн
odnochlenСори, не воспользовался. Так правильно ?
Кнопочку code на панели бебекодов видишь?
Офлайн
Отступы неправильные и последний блок тоже в code засунь.
Отступы в питоне по 4 пробела.
Отредактировано odnochlen (Сен. 5, 2012 22:49:26)
Офлайн
odnochlen1. Отступы в сорсе - по одному пробелу. Вставлял в форум прямо из рабочего сорса.
Отступы неправильные и последний блок тоже в code засунь.
Отредактировано Ace (Сен. 5, 2012 23:00:24)
Офлайн
AceИ он компилируется? о_О
1. Отступы с сорсе - по одному пробелу. Вставлял в форум прямо из рабочего сорса.
Отредактировано odnochlen (Сен. 5, 2012 22:55:35)
Офлайн
odnochlenИмянно. Выполняется нормально в 3.2.3 и 2.7. Кроме той части, которая вызвала вопросAceИ он компилируется? о_О
1. Отступы с сорсе - по одному пробелу. Вставлял в форум прямо из рабочего сорса.
Отредактировано Ace (Сен. 5, 2012 23:13:45)
Офлайн
Попробуйте вместо threading использовать multiprocessing:
import multiprocessing p = multiprocessing.Process(target=fuu, args=(5, )) p.start()
Отредактировано adw0rd (Сен. 6, 2012 00:57:27)
Офлайн
Я, конечно виндовс давно видел в последний раз, но смутно помню, что в каждом потоке надо COM отдельно инициализировать CoInitialize
Офлайн
Рабочий код;
import win32com.client import threading import pythoncom def fuu(id): pythoncom.CoInitialize() try: print ('f1') objWMI4=win32com.client.GetObject(r"winmgmts:\\.\root\cimv2") print ('f2') finally: pythoncom.CoUninitialize() # Main function print ('1') t = threading.Thread(target=fuu,args=(5,)) print ('2') t.start() print ('3')
Офлайн