簡體   English   中英

帶進程的 Python Apscheduler(多處理)

[英]Python Apscheduler with processes (multiprocessing)

我正在嘗試通過 Apscheduler 模塊運行進程(多處理模塊)

    sched = BackgroundScheduler(executors=executors)
    sched.add_listener(my_listener, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR)
    #sched.add_job(run_processes, trigger='cron', hour='14', minute='06')
    sched.add_job(run_processes) # starts it a once
    sched.start()

run_processes 看起來像這樣

def run_processes():

print ("starting p1")
print ("starting p2")    
##run_process_1()
##run_process_2()
p1 = Process(target = run_process_1, args = ())
p2 = Process(target = run_process_2, args = ())

p1.start()
p2.start()

print p1, p1.is_alive()
print p2, p2.is_alive()
p1.join()
p2.join()
print ("finished")

當我在沒有 Apscheduler 的情況下啟動 run_processes() 時,它運行正常。 當我通過 Apscheduler 運行它時,進程似乎開始了(有新的 Python 實例),但隨后似乎等待或掛起什么都不做。

有沒有人知道那里有問題以及可能如何解決?

你可以試試simple-scheduler 它具有生成子進程的能力,無需任何努力。

from simple_scheduler.recurring import recurring_scheduler
from multiprocessing import Process

def f1():
    print("Hi")
    
def f2():
    print("...")

def run_processes():
    p1 = Process(target = f1)
    p1.start()
    p2 = Process(target = f2)
    p2.start()
    p1.join()
    p2.join()
    print("finished")

recurring_scheduler.add_job(target=run_processes,
                            period_in_seconds=5,
                            job_name="run_processes")
recurring_scheduler.job_summary()
recurring_scheduler.run()
recurring_scheduler.job_summary()

輸出是

run_processes [recurring | 5-second(s)] running in 11870
Hi
...
finished
Hi
...
finished
Hi
...
finished

暫無
暫無

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

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