python многопоточность: можно ли блокировать потоки? - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь научиться многопоточности, вот мой код:

import threading, saspy

def sas_session(sas_string):
    sas=saspy.SASsession()
    sas.submit(sas_string)
    sas._endsas()       

if __name__ == "__main__":

    sas_string1='data aa.para_001;\n start = datetime(); \n slept=sleep(rand("Uniform")+10,1);\n ending=start+slept;\nrun;'

    t1 = threading.Thread(target=sas_session, args=(sas_string1,)) 

    t1.start()    
    t1.join()

И я получил сообщение об ошибке:

Using SAS Config named: iomcom
Exception in thread Thread-3832:
Traceback (most recent call last):
  File "C:\Users\Myself\.conda\envs\Myself\lib\site-packages\win32com\client\dynamic.py", line 89, in _GetGoodDispatch
    IDispatch = pythoncom.connect(IDispatch)
pywintypes.com_error: (-2147221008, 'CoInitialize has not been called.', None, None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Myself\.conda\envs\Myself\lib\threading.py", line 926, in _bootstrap_inner
    self.run()
  File "C:\Users\Myself\.conda\envs\Myself\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "U:\python_projects\multi_thread\code.py", line 38, in sas_session
    sas=saspy.SASsession()
  File "C:\Users\Myself\.conda\envs\Myself\lib\site-packages\saspy\sasbase.py", line 448, in __init__
    self._io = SASSessionCOM(sascfgname=self.sascfg.name, sb=self, **kwargs)
  File "C:\Users\Myself\.conda\envs\Myself\lib\site-packages\saspy\sasiocom.py", line 200, in __init__
    self.pid = self._startsas()
  File "C:\Users\Myself\.conda\envs\Myself\lib\site-packages\saspy\sasiocom.py", line 215, in _startsas
    factory = dynamic.Dispatch('SASObjectManager.ObjectFactoryMulti2')
  File "C:\Users\Myself\.conda\envs\Myself\lib\site-packages\win32com\client\dynamic.py", line 127, in Dispatch
    IDispatch, userName = _GetGoodDispatchAndUserName(IDispatch,userName,clsctx)
  File "C:\Users\Myself\.conda\envs\Myself\lib\site-packages\win32com\client\dynamic.py", line 114, in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:\Users\Myself\.conda\envs\Myself\lib\site-packages\win32com\client\dynamic.py", line 91, in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
pywintypes.com_error: (-2147221008, 'CoInitialize has not been called.', None, None)

Exception ignored in: <function SASSessionCOM.__del__ at 0x0000022E2F5B8438>
Traceback (most recent call last):
  File "C:\Users\Myself\.conda\envs\Myself\lib\site-packages\saspy\sasiocom.py", line 203, in __del__
    if self.adodb.State == self.STATE_OPEN:
AttributeError: 'SASSessionCOM' object has no attribute 'adodb'

Что означает это сообщение об ошибке? Стоит упомянуть одну вещь:

sas.submit(sas_string)

займет много времени до окончания sh, вероятно, около 10 секунд. Я предполагаю, что это процесс блокировки. Может ли это быть причиной?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...