如何在不使用另一個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