多处理库永久锁定所创建的PyCharm和subprocesses,我遇到了一个奇怪的问题。我使用Windows和Python3.5。我想做的是:
但是,我发现新创建的多处理进程在满足以下条件的情况下才会永久锁定:
下面是我可以创建的最简单的再现问题的示例:
import multiprocessing
import threading
import sys
def noop():
pass
def consume():
while True:
sys.stdin.readline()
if __name__ == '__main__':
# create a daemon thread to block on stdin
thread = threading.Thread(target=consume, daemon=True)
thread.start()
# create a background process
process = multiprocessing.Process(target=noop)
process.start()我搜索了"PyCharm stdin多处理挂“的各种组合.我不知道为什么stdin上阻塞主进程的线程也会导致subprocess阻塞/挂起,更不用说为什么只有在PyCharm中运行脚本时才会发生这种情况。我唯一能猜到的是,可能会有一些stdin或多进程库的猴子补丁正在进行。
还有其他人遇到过这个问题吗?有人能向我解释为什么这只发生在PyCharm中,以及我如何使它工作,而不管我使用的是哪个Python编辑器?
发布于 2018-04-16 14:44:06
当我试图执行多个API调用从远程服务器获取数据时,我也遇到了同样的问题。我用ThreadPoolExecutor替换了多处理假人。它的工作方式和假人一样。
下面是正在运行的代码的简短片段,用于将响应写入json文件:
uids = [] # an array of the requisite parameters used in requests
with open('flight_config.json', 'w') as f:
futures = []
for i in range(chunk_index, len(uids)):
print('For uid[{}], fetching started:'.format(i))
chunk_index += 1
auth_token = get_header()
with ThreadPoolExecutor(max_workers=7) as executor:
future_to_url = {executor.submit(fetch_response_from_api, uid=uid, auth_token=auth_token): uid for uid in
uids[i]}
for future in concurrent.futures.as_completed(future_to_url):
result = future_to_url[future]
try:
data = future.result()
print(data)
except Exception as exc:
print('%r generated an exception: %s' % (result, exc))
else:
print('%r page is %d bytes' % (result, len(data)))https://stackoverflow.com/questions/47267077
复制相似问题