多个线程同时执行 ret = os.system(f"ping {ip} -n 2")
时间: 2024-10-20 10:16:43 浏览: 19
opencv_python-4.1.2.30-cp38-cp38-win_amd64.zip
在Python中,`os.system()` 是一个外部命令执行函数,但它不是一个线程安全的操作,因为它会在当前进程中同步阻塞等待命令的结果。如果你想让多个线程同时执行 ping 操作,你需要避免直接在线程间共享 `os.system()` 的结果,因为这可能导致数据竞争和意外的行为。
一种解决方案是使用异步I/O库如`subprocess.Popen` 或 `concurrent.futures`模块来创建并管理子进程,它们提供非阻塞执行功能,适合并发处理:
```python
import subprocess
from concurrent.futures import ThreadPoolExecutor
def ping_ip(ip):
with ThreadPoolExecutor() as executor:
process = executor.submit(subprocess.run, ['ping', '-n', '2', ip], capture_output=True)
result = process.wait()
return result.returncode
# 分别在多个线程中执行
ips_to_ping = [IP1, IP2, IP3]
results = [ping_ip(ip) for ip in ips_to_ping]
阅读全文