是否有子进/线程对主线程队列进行操作的方法?以及回调函数范围的问题。。。
資深大佬 : pppguest3962 2
python 是一知半解,属于急忙有车就上的认知,摸了一天才知道子进 /线程无法直接去操作主线程的队列,
改变想法,从进 /线程里面回调”推”任务出来,在进 /线程结束后,由主线程对列表任务进行操刀处理加入到队列,
才发现在回调函数里面似乎受限制了,如何破?
# 最终结果列表,全局的味道 GGlobalList = [] def procSome(xx): return xxList def multiProcFun(): BABTaskDict = {'TkNum': 32, 'TkString': 'test String'} def procFun(taskInfo): aDataList = [] for i in range(1, 7) taskNumber = taskInfo.get('TkNum') taskString = taskInfo.get('TkString') somethingList = procSome(taskNumber, taskString) ... ... aDataList = aDataList + somethingList if aDataList: return aDataList else: return None with concurrent.futures.ProcessPoolExecutor(max_workers=3) as executor: def cb_fun(res): data = res.result() if data: # global GGlobalList # 很显然这里就算声明了要用,也是不行的 # GGlobalList = GGlobalList + data <--报: # UnboundLocalError: local variable 'addtomtQueenList' referenced before assignment # 错误 to_do = [] future = executor.submit(procFun, BABTaskDict).add_done_callback(cb_fun) to_do.append(future) if __name__ == '__main__': ltQueen = queue.LifoQueue() multiProcFun() for i in GGlobalList: ltQueen.put(i) # 如果能在 procFun 里面直接操作 ltQueen 就好了...
大佬有話說 (4)