0
私は2つのプロセスを作り、それらを互いに通信させようとしています。それらのうちの1つは、win32comを使用してCOMライブラリを介して値を取得し、もう1つはキューを介して最初のプロセスから値を取得し、それらを出力します。私は以下のコードは問題ありませんが、動作しません(p2プロセスは値を全く表示しません)。同じプロセス内の最初のプロセスプリントキューの値を同じプロセスで作成するだけであれば、キューに値が表示されます。だから、私はキューに値を入れても何の問題を持っていないと思うし、それゆえ、win32com
PythonでCOMとマルチプロセッシングを同時に使用する方法はありますか?
import win32com.client
import os
import multiprocessing as mp
from PyQt4.QtGui import QApplication
from datetime import datetime, timedelta
global q
q = mp.Queue() # A queue is used to send values from p1 to p2
class RealTrEventHandler(object):
def __init__(self):
self.q = q
def OnReceiveRealData(self,szTrCode):
date = datetime.utcnow() + timedelta(hours=3)
type = self.GetFieldData("OutBlock", "cgubun")
appending_line = date + ', ' + type
self.q.put(appending_line)
#item = self.q.get() # it prints values out if these are not comments
#print(item)
def ticker():
loop = QApplication([])
global instXASession, instXAReal
print('TICKER: ', os.getpid())
# When an event occurs, it calls RealTrEventHandler class
instXAReal = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", RealTrEventHandler)
instXAReal.LoadFromResFile("C:\\eBEST\\xingAPI\\Res\\OVC.res")
instXAReal.SetFieldData("InBlock", "symbol", "CLX17")
loop.exec_()
class listener(mp.Process): # What listener does is only to get values via the queue and prints them out
def __init__(self):
mp.Process.__init__(self)
self.q = q
def run(self):
print('CSM PID: ', os.getpid())
while True:
item = self.q.get()
print(item)
if __name__ == '__main__':
loop = QApplication([])
print('MAIN: ', os.getpid())
p1 = mp.Process(target = ticker, args=())
p1.start()
p2 = listener()
p2.start()
mp.freeze_support()
loop.exec_()
を使用して、queue
経由で値をやり取りにおけるいくつかの問題があるかもしれない誰も私にいくつかのアドバイスを与えることができますか?
ありがとうございました。私はこのようにqを宣言しようとしましたが、違いはありません。はい、私は多分このスレッド(https://stackoverflow.com/questions/26764978/using-win32com-with-multithreading)は私の問題と関係があると思うが、マルチプロセッシングとDispatchWithEvents。 – maynull