Я относительно новичок в многопоточности и многопоточности. Я только что столкнулся с другим блоком обучения, когда понял, что windows и linux по-разному обрабатывают мультиобработку. Я не знаю технических деталей, но я знаю, что это другое.
Я использую django для выполнения моего приложения: python manage.py random_script
, в random_script, я импортирую многопроцессорную обработку и вращение различных процессов. я получаю следующую ошибку:
File "<string>", line 1, in <module>
File "C:\FAST\Python\3.6.4\lib\multiprocessing\spawn.py", line 99, in spawn_main
new_handle = reduction.steal_handle(parent_pid, pipe_handle)
File "C:\FAST\Python\3.6.4\lib\multiprocessing\reduction.py", line 82, in steal_handle
_winapi.PROCESS_DUP_HANDLE, False, source_pid)
OSError: [WinError 87] The parameter is incorrect
Я пытался добавить это вверху, потому что мой сервер разработки windows, но мой рабочий сервер linux:
if 'win' in sys.platform:
print('Window')
multiprocessing.set_start_method('spawn')
else:
print('Linux')
multiprocessing.set_start_method('fork')
Но для нет успеха Когда я продолжил просматривать Google, он предложил написать часть процесса, появляющуюся под строкой if __name__ == '__main__':
. Это было бы хорошо, если я выполняю свои сценарии нормально (т.е. python random_script.py
), но я не выполняю. У меня закончились идеи, и я больше не знаю, как действовать.
++ EDITED ++
manage.py
#!/usr/bin/env python
import os
import sys
import argparse
DEFAULT_SETTINGS_MODULE = "api.test_settings"
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", DEFAULT_SETTINGS_MODULE)
try:
from django.core.management import execute_from_command_line
except ImportError:
# The above import may fail for some other reason. Ensure that the
# issue is really that Django is missing to avoid masking other
# exceptions on Python 2.
try:
import django
except ImportError:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
)
raise
execute_from_command_line(sys.argv)
random_script.py:
class Command(BaseCommand):
def __init__(self):
super().__init__()
def handle(self, *args, **kwargs):
<...>
self.main()
def main(self):
<...>
Выше мой manage.py и мой random_script.py.
Спасибо за руководство