【问题标题】:multiprocessing with apscheduler使用 apscheduler 进行多处理
【发布时间】:2019-07-31 22:04:32
【问题描述】:

我有大约 200 个项目要处理,这是一项每秒连续运行的工作。

我尝试了以下代码,但它看起来像处理项目数,匹配 CPU 内核。我的理解是因为 pool.map 只调度匹配 CPU 内核的进程,并且因为 BlockingScheduler 没有返回。

import multiprocessing
import time
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler


def process(number):
    scheduler = BlockingScheduler()
    scheduler.add_job(timer, 'interval', seconds=1, args=[number])

    scheduler.start()


def timer(number):
    print(f"{datetime.datetime.now().time()} {number} - completed processing. ")


def run(number_to_process):
    with multiprocessing.Pool() as pool:
        pool.map(process, number_to_process)


if __name__ == "__main__":
    number_to_process = range(1, 200)
    start_time = time.time()
    run(number_to_process)

所以,我尝试了以下代码。看起来它正在处理所有 200 个项目。我的问题是:在我在这里创建 200 个进程时,它是充分利用 CPU 还是有任何副作用?

from multiprocessing import Process
import time
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler


def process_number(number):
    scheduler = BlockingScheduler()
    scheduler.add_job(timer, 'interval', seconds=1, args=[number])

    scheduler.start()


def timer(number):
    print(f"{datetime.datetime.now().time()} {number} - completed processing. ")


def run(number_to_process):
    processes = []

    for number in number_to_process:
        print(number)
        p = Process(target=process_number, args=(number,))
        p.start()
        processes.append(p)

    for process in processes:
        process.join()


if __name__ == "__main__":
    number_to_process = range(1, 200)
    start_time = time.time()
    run(number_to_process)

【问题讨论】:

    标签: python-3.x apscheduler


    【解决方案1】:

    200 个进程是一个很小的数字。您可以通过运行以下命令检查系统支持的最大进程数: 猫 /proc/sys/kernel/pid_max 它给出了系统可以支持的最大进程数。

    要检查 CPU 是否得到有效使用,请在运行应用程序时运行 htop 命令

    此外,您可以尝试启用 Affinity 以更有效地使用内核。 有关亲和力的更多详细信息,请参阅此链接, https://docs.python.org/dev/library/os.html#os.sched_setaffinity

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-06
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      相关资源
      最近更新 更多