Python 版本 3.4.2 ,主进程内的定义了一个 RabbitMQ 连接,变量为 connection ,保存了该链接的句柄。
我需要在四个子进程内分别使用这个句柄的方法,但是报错:
Can't pickle <class '_thread.lock'>: attribute lookup lock on _thread failed
Google 搜索结果都是建议使用 multiprocessing.Queue 来进行进程间通讯,但是看起来不能满足我的需求。请问大家对于这种子进程共享父进程内的变量(句柄)是怎么处理的呢?
代码如下
from multiprocessing import Pool
import os, time, random, sys, pika
def long_time_task(rabbitmq_handle):
def e_c(e):
print(e)
if __name__=='__main__':
connection = pika.BlockingConnection(pika.ConnectionParameters(
host='172.17.0.9'))
p = Pool()
for i in range(5):
p.apply_async(long_time_task, args=( connection, ), error_callback=e_c)
print( 'Waiting for all subprocesses done...')
p.close()
p.join()
print( 'All subprocesses done.')
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.