簡體   English   中英

Python:如何同時運行多個文件?

[英]Python: How to run multiple files at the same time?

我正在嘗試創建一個For循環,該循環會在完全相同的時間自動啟動不同的python文件,但是它們似乎總是一個接一個地運行。

import os
import multiprocessing
import p1, p2, p3

#first idea

path = "C:" + "\\Users\\Max\\\\Desktop\\\python\\tasks\\"
tasks = ['p1.py', 'p2.py', 'p3.py']
len = tasks.__len__()
ind = 0
for i in range(len):
    os.system('python' + ' ' + tasks[ind])
    ind += 1

#second idea

for x in ('p1', 'p2', 'p3'):
    p = multiprocessing.Process(target=lambda: __import__(x))
    p.start()

p1,p2,p3是我試圖同時運行的文件,但是它們是一個接一個地執行的,因此,如果代碼是:

time.sleep(10)
print("hello)

我將需要等待30秒才能完成程序,而不是我想要的10秒。

如果要在三個單獨的解釋器中啟動文件,請將它們作為子過程啟動:

import subprocess
path = r"C:\Users\Max\Desktop\python\tasks"
tasks = ['1.py', '2.py', '3.py']
task_processes = [
    subprocess.Popen(r'python %s\%s' % (path, task), shell=True)
    for task
    in tasks
]
for task in task_processes:
    task.wait()

如果要繼續使用多處理,可以將系統調用封裝在一個函數中:

import os
from multiprocessing import Process

path = "C:\\Users\\Max\\\\Desktop\\\python\\tasks\\"
tasks = ['1.py', '2.py', '3.py']

def foo(task):
    os.system('python ' + path + task)

for task in tasks:
    p = Process(target=foo, args=(task,))
    p.start()

基於OP的評論實際目標:

我正在嘗試使用webbrowser模塊在瀏覽器中同時打開不同的鏈接。 本質上是time.sleep(10) webbrowser.open("google.com")但每個文件中的鏈接都不同

我們可以改為使用線程。 我為每個URL添加了一個不同的延遲選項,因為否則,沒有必要讓每個線程自己休眠。

import webbrowser
import threading
import time


def delayed_open_url(delay, url):
    time.sleep(delay)
    webbrowser.open(url)


threads = []
for delay, url in [
    (3, "http://google.com"),
    (5, "http://example.com"),
    (11, "http://stackoverflow.com"),
]:
    threads.append(
        threading.Thread(target=delayed_open_url, args=(url,)).start()
    )

for thread in threads:
    thread.join()  # Wait for each thread

# This code will be executed after each thread is done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM