python - 在 Linux 中同时使用 python 执行多个命令

标签 python linux python-multithreading

我需要在 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/

相关文章:

python - 为什么在 tensorflow 中的 batch 维度使用 None?

python - 在 TensorFlow 中对整数张量进行卷积

linux - DB2 强制应用程序无法终止加载作业

python - 如何加速与子进程的通信

Python 多处理-为已完成的进程分配新函数?

python - 如何在 allure.step 中显示可变长度参数列表?

python - azcopy:由于错误而无法解析用户输入:当前不支持推断的源/目标组合

python - threading.timer 只打印 for 循环的最后一个值

c - nf_conntrack_helper 注册未注册端口返回错误

linux - 保持命名管道运行