Ходовой резьбовой модуль с сельдереем;демонические процессы не могут иметь детей - PullRequest
0 голосов
/ 17 февраля 2019

Я реализовал очередь с сельдереем в своем приложении фляги.Все работает хорошоНо мне нужно использовать этот модуль с именем sublist3r , и когда я использую его в задаче сельдерея, я получаю эту ошибку:

[2019-02-16 21:32:52,658: INFO/ForkPoolWorker-6] Task tasks.task.addd[57793628-de25-4c89-a265-5fee69a8b2bf] succeeded in 0.0236732449848s: None
[2019-02-16 21:32:52,660: WARNING/ForkPoolWorker-6] Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/home/me/code/proj/tasks/task.py", line 15, in getd
    sub = sublist3r.main(url, 40, None, ports=None, silent=True,verbose=False, enable_bruteforce=False, engines=None)
  File "/home/me/code/proj/sublist3r/sublist3r.py", line 871, in main
    subdomains_queue = multiprocessing.Manager().list()
  File "/usr/lib/python2.7/multiprocessing/__init__.py", line 99, in Manager
    m.start()
  File "/usr/lib/python2.7/multiprocessing/managers.py", line 524, in start
    self._process.start()
  File "/usr/lib/python2.7/multiprocessing/process.py", line 124, in start
    'daemonic processes are not allowed to have children'
**AssertionError: daemonic processes are not allowed to have children**

Это происходит, потому что я пытаюсь использовать модульчто использует темы?Как я могу добиться использования этого модуля в очереди или асинхронно?

Спасибо

1 Ответ

0 голосов
/ 17 февраля 2019

Похоже, что sublist3r использует многопроцессорность и пытается запустить свои собственные процессы.На самом деле вы не можете сделать это в сельдерее, потому что на производстве celery уже запускает рабочего в своем собственном дочернем процессе, и, как вы можете заметить из сообщения об ошибке, celery не позволит вам запускать многопроцессорные процессы, которые sublist3rиспользует.Если вы хотите использовать его, лучше всего переписать эти классы в sublist3r самостоятельно, чтобы получить из celery.Task вместо multiprocessing.Process.

...