在Python中使用不同的可执行文件运行多处理池
是否可以使用与Python中主进程不同的可执行文件运行多处理池(或子进程) 我想到的用例是同时使用不同的VirtualNV并行运行一些一次性测试,以便为不同的库版本收集一些数据 我可以预见的问题是,以这种方式在子流程之间进行酸洗/共享可能并不简单,因为库版本可能不同。但是,简单的数据类型(列表、dict)可能会起作用。 如果这是一个问题,那么在二进制模式下使用在Python中使用不同的可执行文件运行多处理池,python,multiprocessing,Python,Multiprocessing,是否可以使用与Python中主进程不同的可执行文件运行多处理池(或子进程) 我想到的用例是同时使用不同的VirtualNV并行运行一些一次性测试,以便为不同的库版本收集一些数据 我可以预见的问题是,以这种方式在子流程之间进行酸洗/共享可能并不简单,因为库版本可能不同。但是,简单的数据类型(列表、dict)可能会起作用。 如果这是一个问题,那么在二进制模式下使用stdin和stdout的subprocess和在管道中上下切换pickle(听起来是错误的)就可以了。。。这假设父级运行的是Python
stdin
和stdout
的subprocess
和在管道中上下切换pickle(听起来是错误的)就可以了。。。这假设父级运行的是Python 3
导入系统
进口泡菜
导入子流程
随机输入
输入io
#抓取二进制I/O流
如果系统版本信息[0]==3:
i_stream=sys.stdin.buffer
o_stream=sys.stdout.buffer
其他:
i_stream=sys.stdin
o_stream=sys.stdout
def child():
input\u data=pickle.load(i\u stream.read())
输出数据=dict(
输入数据,
随机两次=输入数据[“随机”]*2,
版本=元组(系统版本信息),
)
o_stream.write(pickle.dumps(输出_数据,协议=2))
def parent():
#Python 2.7支持的最高协议是版本2。
输入数据=pickle.dumps(
{“你好”:“世界”,“随机”:random.randint(11000)},
协议=2,
)
对于“python2.7”、“python3.7”中的python:
proc=子流程.run(
[“/usr/bin/env”,python,sys.argv[0],“child”,
检查=正确,
编码=无,
输入=输入数据,
stdout=子流程.PIPE,
)
打印(python、pickle.load(proc.stdout))
如果名称=“\uuuuu main\uuuuuuuu”:
如果sys.argv中有“child”:
child()
其他:
父项()
输出
python2.7 {'random_twice': 174850, 'random': 87425, 'hello': 'world', 'version': (2, 7, 16, 'final', 0)}
python3.7 {'hello': 'world', 'random': 87425, 'random_twice': 174850, 'version': (3, 7, 6, 'final', 0)}
我认为您最好使用
tox
来测试多个virtualenv?这是一个很好的观点,我可能已经在集成或单元测试中这样做了。我想到的更多的是从同一个库的不同版本收集数据(所以更像是一次性的)。我会更新问题的!