繁体   English   中英

使用Python多处理程序延迟启动任务

[英]Delayed start of tasks with Python multiprocessing

我最近一直在研究Python多处理功能,并遇到以下代码问题

import syslog
from multiprocessing import Pool
def launcher(i):
    time.sleep(i)
    syslog.openlog( 'test', 0, syslog.LOG_LOCAL4 )
    syslog.syslog( '{} {}'.format(i,datetime.now()))

if __name__ == '__main__':
    pool=Pool(8)
    pool.map(launcher,range(1,3000))
    pool.close()
    pool.join()

它背后的想法很简单:我需要在我的syslog中获得稳定的消息流(每秒一条消息),但是我想在具有多处理池的8个工作进程中生成它。

在我的系统日志中(在我的Ubuntu上是本地/ var / log / syslog),我得到了以下内容

Sep 17 17:17:57 test: 1 2015-09-17 17:17:57.225699
Sep 17 17:17:58 test: 2 2015-09-17 17:17:58.226957
Sep 17 17:18:00 test: 3 2015-09-17 17:18:00.229196
Sep 17 17:18:03 test: 4 2015-09-17 17:18:03.232390
Sep 17 17:18:07 test: 5 2015-09-17 17:18:07.236587
Sep 17 17:18:12 test: 6 2015-09-17 17:18:12.241737
Sep 17 17:18:18 test: 7 2015-09-17 17:18:18.247926
Sep 17 17:18:25 test: 8 2015-09-17 17:18:25.255169
Sep 17 17:18:29 test: 9 2015-09-17 17:18:29.258229
Sep 17 17:18:33 test: 10 2015-09-17 17:18:33.263454
Sep 17 17:18:42 test: 64 2015-09-17 17:18:42.272675
Sep 17 17:18:52 test: 33 2015-09-17 17:18:52.283012
Sep 17 17:19:01 test: 11 2015-09-17 17:19:01.290070
Sep 17 17:19:02 test: 12 2015-09-17 17:19:02.259826

首先,流程不统一,其次,流程混乱。

如果那是什么原因?

为什么Linux进程调度程序可以在Python多处理中像这样工作?

有什么办法可以解决多任务的问题吗?

即使操作系统仅对您的程序进行实时调度,您也不会在一秒钟后收到统一的消息:

  1. 需要8个厨房计时器和一堆便笺纸。
  2. 编号2999,从1到2999。
  3. 拿一个计时器和一个便利贴,将时间设置为便利贴上的数字,然后放在一边。
  4. 重复3,直到定时器用完
  5. (如果您的速度非常快,亚秒级的速度)您有8个计时器从[1、2、3、4、5、6、7、8]倒数
  6. 等一会儿
  7. 现在您的第一个计时器应该关闭,重复步骤3。
  8. 您现在有8个计时器在运行

顺序将是

[9, 1, 2, 3, 4, 5, 6, 7]
[8, 10, 1, 2, 3, 4, 5, 6]
[7, 9, 11, 1, 2, 3, 4, 5]
[6, 8, 10, 12, 1, 2, 3, 4]
[5, 7, 9, 11, 13, 1, 2, 3]
[4, 6, 8, 10, 12, 14, 1, 2]
[3, 5, 7, 9, 11, 13, 15, 1]
[2, 4, 6, 8, 10, 12, 14, 16]
#Notice that for the next timer to go off, you have to wait 2 seconds, not 1!
[17, 2, 4, 6, 8, 10, 12, 14]
[15, 18, 2, 4, 6, 8, 10, 12]
...
[3, 6, 9, 12, 15, 18, 21, 24]
#3 seconds to wait, not 1!
[25, 3, 6, 9, 12, 15, 18, 21]
...
[4, 8, 12, 16, 20, 24, 28, 32]

编辑:

我之所以对您为何经历如此快速的1、2、3等待感到猜测,可能是因为您的8个工人同时试图对同一系统日志进行IO。 我认为那里有些障碍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM