在Python中使用不同的可执行文件运行多处理池

在Python中使用不同的可执行文件运行多处理池,python,multiprocessing,Python,Multiprocessing,是否可以使用与Python中主进程不同的可执行文件运行多处理池(或子进程) 我想到的用例是同时使用不同的VirtualNV并行运行一些一次性测试,以便为不同的库版本收集一些数据 我可以预见的问题是,以这种方式在子流程之间进行酸洗/共享可能并不简单,因为库版本可能不同。但是,简单的数据类型(列表、dict)可能会起作用。 如果这是一个问题,那么在二进制模式下使用stdin和stdout的subprocess和在管道中上下切换pickle(听起来是错误的)就可以了。。。这假设父级运行的是Python

是否可以使用与Python中主进程不同的可执行文件运行多处理池(或子进程)

我想到的用例是同时使用不同的VirtualNV并行运行一些一次性测试,以便为不同的库版本收集一些数据

我可以预见的问题是,以这种方式在子流程之间进行酸洗/共享可能并不简单,因为库版本可能不同。但是,简单的数据类型(列表、dict)可能会起作用。

如果这是一个问题,那么在二进制模式下使用
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?这是一个很好的观点,我可能已经在集成或单元测试中这样做了。我想到的更多的是从同一个库的不同版本收集数据(所以更像是一次性的)。我会更新问题的!