我有一个执行多线程复制和MD5校验和哈希的类。单个文件副本的一般流程如下:
我最近将读取线程从threading.Thread()切换到ThreadPool(processes = 1).apply_async(),因为它更易于在readpool上使用get(),然后将读取线程写入全局变量并检查它是否为isAlive()后,对其执行join()。
这是我的问题! 进行此更改后,从OS X的终端窗口进行测试时,代码可以正常工作,但是一旦将其部署到运行Ubuntu的Docker容器中,就会导致巨大的性能问题。复制充满文件的文件夹时,它将获得数百个文件,并且只是停止运行。使用一堆打印语句对代码进行故障诊断,我将其范围缩小到上述循环,并且我知道随着文件线程的读取,最近在该循环中唯一更改的内容。一旦我将其切换回原来的状态,就可以正常工作。
docker容器可以获取的进程数量是否有限制?有人对我的想法有什么想法吗?我现在已经解决了问题,但是我很想知道问题是什么,所以我不再做。