我需要在 Linux 中同时使用 python 执行多个命令。 我不需要一个命令一个命令地运行它。
我尝试编写这段代码,但我不明白如何使用 python 同时执行多个命令,我也阅读了 python 多线程,但我不知道如何使用它。
代码:
# -*- coding: utf-8 -*-
import os
commands = ['ping www.google.com', 'ping www.yahoo.com', 'ping www.hotmail.com']
count = 0
for com in commands:
print "Start execute commands.."
os.system(com)
count += 1
print "[OK] command "+str(count)+" runing successfully."
else:
print "Finish.."
请问我如何用 python 做到这一点并同时执行多个命令??
最佳答案
看起来像一个典型的生产者-消费者问题
import threading
import os
commands = ['ping www.google.com', 'ping www.yahoo.com', 'ping www.hotmail.com']
def worker_func():
while commands: # Checks if the list is not-empty. Loop exits when list is becomes empty
com = commands.pop(0)
print "Start execute commands.."
os.system(com)
count += 1
print "[OK] command "+str(count)+" runing successfully."
workers = [threading.Thread(target=worker_func, args=tuple(), name='thread_'+str(i)) for i in range(5) ] # Create 5 workers (consumers)
[worker.start() for worker in workers] # Start working
[worker.join() for worker in workers] # Wait for all workers to finish
我在这里创建了 5 个工作线程。这些线程将运行函数 worker_func
。
worker_func
将从列表中选取一个元素并执行作业。当列表变空时,函数返回(退出)。
注意:了解Global Interpreter Lock了解不应该使用 python 多线程的地方。
在这种情况下,GIL(全局解释器锁)不应该影响你,因为 worker_func
调用一个子进程并等待它完成。当线程等待时,GIL 被释放给其他线程。
关于python - 在 Linux 中同时使用 python 执行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37092683/