如何在不使用另一个python脚本中的线程和多重处理的情况下多次同时使用不同的PID执行单个python脚本?在没有线程的情况下同时执行python脚本
,我需要从每个执行
得到的结果我想多处理模块简单的程序,我得到了AttributeError: 'module' object has no attribute 'f'
,它需要在Linux和Windows工作。以前的帖子的解决方案不适合我
经过与以前的帖子验证后,我再次发布。
如何在不使用另一个python脚本中的线程和多重处理的情况下多次同时使用不同的PID执行单个python脚本?在没有线程的情况下同时执行python脚本
,我需要从每个执行
得到的结果我想多处理模块简单的程序,我得到了AttributeError: 'module' object has no attribute 'f'
,它需要在Linux和Windows工作。以前的帖子的解决方案不适合我
经过与以前的帖子验证后,我再次发布。
不同的PID意味着您需要不同的过程。不使用multiprocessing
您就可以开始与subprocess
模块另一个进程,并通过stdout
得到的结果:
#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
import pickle
import sys
from subprocess import PIPE, Popen
def main():
processes = [
Popen([sys.executable, 'test.py'], stdout=PIPE)
for _ in xrange(5)
]
results = [pickle.loads(p.stdout.read()) for p in processes]
for process in processes:
process.wait()
print(results)
if __name__ == '__main__':
main()
test.py
需要写的结果与序列化到pickle
其stdout
。
愿意帮忙吗?
用于演示test.py:(just)
import time, os, datetime, fcntl
with open("output.txt", "a") as g:
fcntl.flock(g, fcntl.LOCK_EX)
g.write("PID [" + str(os.getpid()) + "]," + str(datetime.datetime.now()) + "\n")
fcntl.flock(g, fcntl.LOCK_UN)
time.sleep(30)
with open("output.txt", "a") as g:
fcntl.flock(g, fcntl.LOCK_EX)
g.write("PID [" + str(os.getpid()) + "]," + str(datetime.datetime.now()) + "\n")
fcntl.flock(g, fcntl.LOCK_UN)
运行了好几次:
[email protected]:~/src$ python test2.py &
[1] 29265
[email protected]:~/src$ python test2.py &
[2] 29266
[email protected]:~/src$ python test2.py &
[3] 29268
[email protected]:~/src$ python test2.py &
[4] 29269
[email protected]:~/src$ vim test2.py
[1] Done python test2.py
[2] Done python test2.py
[3]- Done python test2.py
[4]+ Done python test2.py
输出:
[email protected]:~/src$ tail -f -n 100 output.txt
PID [29265],2016-01-20 16:28:20.373244
PID [29266],2016-01-20 16:28:21.068946
PID [29268],2016-01-20 16:28:21.911043
PID [29269],2016-01-20 16:28:22.547805
PID [29265],2016-01-20 16:28:50.403474
PID [29266],2016-01-20 16:28:51.075268
PID [29268],2016-01-20 16:28:51.914001
PID [29269],2016-01-20 16:28:52.564706
尝试运行“蟒蛇yourscript.py >>输出.txt&“几次?我正在测试这个。您可以在脚本中打印pid。 – BAE
写脚本中的某个文件代替“>> output.txt”也是很好的做法。如果这符合您的要求,我会提供详细的答案。 – BAE
为什么'multiprocessing.Process'没有选择? – BlackJack