Docker容器中的ThreadPool.apply_async()问题

时间:2019-02-13 00:53:18

标签: python-3.x docker threadpool

我有一个执行多线程复制和MD5校验和哈希的类。单个文件副本的一般流程如下:

  • 加载读取缓冲区,开始循环
    • 将读取缓冲区复制到目标缓冲区
    • 启动新线程以读取下一个数据块
    • 启动新线程以哈希目标缓冲区中的字节
    • 将目标缓冲区写入输出文件
    • 当对输出文件的写入为零字节或更小且小于缓冲区大小时,结束循环

我最近将读取线程从threading.Thread()切换到ThreadPool(processes = 1).apply_async(),因为它更易于在readpool上使用get(),然后将读取线程写入全局变量并检查它是否为isAlive()后,对其执行join()。

这是我的问题! 进行此更改后,从OS X的终端窗口进行测试时,代码可以正常工作,但是一旦将其部署到运行Ubuntu的Docker容器中,就会导致巨大的性能问题。复制充满文件的文件夹时,它将获得数百个文件,并且只是停止运行。使用一堆打印语句对代码进行故障诊断,我将其范围缩小到上述循环,并且我知道随着文件线程的读取,最近在该循环中唯一更改的内容。一旦我将其切换回原来的状态,就可以正常工作。

docker容器可以获取的进程数量是否有限制?有人对我的想法有什么想法吗?我现在已经解决了问题,但是我很想知道问题是什么,所以我不再做。

0 个答案:

没有答案