Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 导入PyTorch后导入OpenCV会与CPU亲和力发生冲突_Python_Opencv_Multiprocessing_Pytorch_Affinity - Fatal编程技术网

Python 导入PyTorch后导入OpenCV会与CPU亲和力发生冲突

Python 导入PyTorch后导入OpenCV会与CPU亲和力发生冲突,python,opencv,multiprocessing,pytorch,affinity,Python,Opencv,Multiprocessing,Pytorch,Affinity,这是我曾经处理过的奇怪软件问题的极端结局。寻求帮助 考虑以下Python脚本: import psutil import torch def run(): curr_process = psutil.Process() curr_process.cpu_affinity([3]) print('Before', curr_process.cpu_affinity()) import cv2 print('After', curr_process.cpu

这是我曾经处理过的奇怪软件问题的极端结局。寻求帮助

考虑以下Python脚本:

import psutil
import torch


def run():
    curr_process = psutil.Process()
    curr_process.cpu_affinity([3])
    print('Before', curr_process.cpu_affinity())
    import cv2
    print('After', curr_process.cpu_affinity())


import multiprocessing
multiprocessing.Process(target=run).start()
您可能会认为导入OpenCV与CPU亲和力无关,前后的输出是相同的,但不是。在我的机器上,此脚本的输出是:

Before [3]
After [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
当然,这个问题是在一个大型应用程序中出现的,它花费了相当大的努力将其归结为这个最小的示例。我发现复制它需要一个关键条件:PyTorch和OpenCV应该从不同的进程导入。一个在叉子前面,一个在叉子后面。如果同时在子进程或主进程中导入,则不会复制,但如果在此脚本中交换
cv2
torch
,则会复制

首先,导入库与CPU相关性有什么关系?也许这是该库的作者进行的某种优化尝试,但却遭到了恶意攻击

那么,我该如何解决这样的问题呢?当然,我可以在fork之前导入所有内容,作为一个快速的黑客解决方案,但我想弄清事情的真相

我的库版本(均从Conda repo安装):

  • opencv=4.1.0=py37h3aa1047_6
  • pytorch=1.4.0=py3.7_cuda10.1.243_cudnn7.6.3_0