Многопроцессорная обработка с Django при импорте внешнего модуля - PullRequest
1 голос
/ 03 мая 2020

Я создал модуль очистки "scraper.py", который также имеет возможность загружать файл, и импортировал этот модуль в django просмотров. Проблема в том, что в scraper.py этот «__name__='__main__» включен там, где находится пул многопроцессорности, поэтому, когда я импортирую модуль и пытаюсь его запустить, он не работает, потому что он не является основным . Это скрипт (scraper.py), который использует метод пула.

 def download(self, url):
    response = self._is_downloadable(url)
    if response:
        name = response.headers.get('content-disposition')
        fname = re.findall('filename=(.+)', name)
        if len(fname) != 0:
            filename = fname[0]
            filename = filename.replace("\"", "")
            print(filename)
        else :
            filename = "Lecture note"
        with open(filename, 'wb') as files:
            for chunk in response.iter_content(100000):
                files.write(chunk)

def download_course_file(self, course):
    username = self._login_data["username"]
    p = Path(f"{username}-{course}.txt").exists()
    if not p:
        self.get_download_links(course)
    statime = time.time()
    if __name__ == "__main__":
        with Pool() as p:  
            with open(f"{username}-{course}.txt", "r") as course_link:
                data = course_link.read().splitlines(False)[::2]
                p.map(self.download, data)
                print(data)
        print(f"Process done {time.time()-statime}")

Этот модуль импортируется в представления и затем запускается как

import scraper
def download_course(request, id):
    course = course = get_object_or_404(Course, id=id)
    course_name = (course.course_name)[:6]
    person, error = create_session(request)
    if "invalid" in error:
        data = {"error":error}
        return JsonResponse(data)
    person.download_course_file(course_name)
    data = {"success":"Your notes are being downloaded"}
    return JsonResponse(data)

PS: create_session - это функция для инициализации объекта скребка с именем пользователя и паролем.

Есть ли обходной путь для этого оператора name , и даже если его нет, я не могу удалить его при развертывании в сервер, если сервер не использует windows в качестве своей ОС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...