Q
蟒蛇的同時
0
A
回答
3
由於Global Interpreter Lock的原因,線程模塊並不會給您帶來太多的性能。
我認爲最好的方法是使用subprocess
模塊並用它自己的stdout打開每個命令。
processes = {}
for cmd in ['cmd1', 'cmd2', 'cmd3']:
p = subprocess.Popen('cmd1', stdout=subprocess.PIPE)
processes[p.stdout] = p
while len(processes):
rfds, _, _ = select.select(processes.keys(), [], [])
for fd in rfds:
process = processses[fd]
print fd.read()
if process.returncode is not None:
print "Process {0} returned with code {1}".format(process.pid, process.returncode)
del processes[fd]
基本上,你必須使用選擇,看看哪個文件描述符準備好,你必須檢查他們的返回碼,看是否做了「讀」使他們退出。進程基本上進入等待狀態,直到他們的標準輸出關閉。如果你想在等待的時候做一些事情,你可以在select.select()上加一個超時時間,這樣你就可以在這麼久之後停止等待。你可以測試rfds的長度,如果它是0,那麼你知道超時發生了。
0
看那threading模塊並行方法。
1
twisted
或select
模塊可能就是您所追求的。
如果你想要做的是一堆批處理命令,shell腳本,即
#!/bin/sh
for i in "command1 command2 command3"; do
$i &
done
可能會更好地工作。或者,像你說的一個Makefile。
相關問題
- 1. 蟒蛇:在同一時間
- 2. 讀/寫同時蟒蛇subprocess.Popen
- 3. 問題,同時對蟒蛇
- 4. 蟒蛇 - 同一類
- 5. 蟒蛇在蟒蛇
- 6. 蟒蛇 - 跳過線同時使用csv.dictreader
- 7. 音樂多個同時音調,蟒蛇
- 8. 等待,並在同一時間蟒蛇
- 9. 同時使用普通班和蟒蛇
- 10. 更新蟒蛇3.5蟒蛇
- 11. 無法在蟒蛇蟒蛇
- 12. 蟒蛇2.7:從CMD蟒蛇
- 13. 蟒蛇 - 在同一目錄
- 14. 蟒蛇線程同步
- 15. 蟒蛇 - 同步兩個QTreeWidgets
- 16. 蟒蛇的urllib2超時
- 17. 蟒蛇-dateutil - RRULE - 不同的時間不同的平日
- 18. 蟒蛇
- 19. 蟒蛇
- 20. 蟒蛇
- 21. 蟒蛇
- 22. GTK3的蟒蛇
- 23. 蟒蛇AttributeError的
- 24. 的蟒蛇
- 25. 的蟒蛇
- 26. 蟒蛇相同功能的perl的hmac_sha1_hex
- 27. 格式化時間蟒蛇
- 28. 蟒蛇subprocess32與超時,overflowerror
- 29. 蟒蛇字典時間謎
- 30. 蟒蛇時區GMT轉換
閱讀關於http://docs.python.org/library/threading.html – GWW 2011-01-05 03:03:10
爲什麼不使用'subprocess.Popen()'? – 2011-01-05 03:54:17