Я не новичок в Python, но довольно плохо знаком с работой с многопроцессорностью в Python. Я предпочитаю работать в vscode, но он работает очень странно, когда я пытаюсь запустить простой пример многопроцессорной обработки.
Я использую Python 3.7.2 и VSCode версии 1.43.0 на Windows.
Вот мои файлы. Сначала вызывающий:
## multi_runner.py
import multiprocessing
import multi_worker
import time
if __name__ == '__main__':
print('Starting the jobs.')
jobs = []
for i in range(5):
p = multiprocessing.Process(
target=multi_worker.worker
)
jobs.append(p)
p.start()
while any(job.is_alive() for job in jobs):
print('sleeping')
time.sleep(1)
print('All done.')
И рабочий:
## multi_worker.py
import multiprocessing
import sys
def worker():
"""worker function"""
print(f'Worker')
return
Когда я запускаю это в командной строке, все работает так, как вы ожидаете:
(venv) C:\multiexample>python multi_runner.py
Starting the jobs.
sleeping
Worker
Worker
Worker
Worker
Worker
All done.
Но когда я запускаю его из отладчика VSCode, кажется, что он никогда не уступает рабочим, и мне приходится его убивать, чтобы закончить:
(venv) PS C:\multiexample> ${env:PTVSD_LAUNCHER_PORT}='52842'; & 'c:\multiexample\venv\Scripts\python.exe' 'c:\Users\myuser\.vscode\extensions\ms-python.python-2020.2.64397\pythonFiles\lib\python\new_ptvsd\wheels\ptvsd\launcher' 'c:\multiexample\multi_runner.py'
Starting the jobs.
sleeping
sleeping
sleeping
sleeping
sleeping
sleeping
sleeping
sleeping
sleeping
<... forever ...>
Вот запуск по умолчанию. json файл, который я использую:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
Есть ли способ заставить это работать в VSCode?