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 就好了...
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.