Асинхронный импорт в Python - PullRequest
0 голосов
/ 25 апреля 2018

Мне нужно импортировать что-то большое и вычислительно дорогое, но мне это не нужно прямо сейчас в моем приложении. Есть ли способ импортировать что-то асинхронно в python, то есть иметь что-либо, что нужно сделать для импорта, в фоновом режиме, пока мой скрипт работает? Google пока не помог.

1 Ответ

0 голосов
/ 25 апреля 2018

Вы можете вызвать импортер python как функцию в другом потоке вместо использования import foo. Поскольку этот импорт требует значительных вычислительных ресурсов и python позволяет запускать одновременно только один поток (если только он не похож на pandas, который выпускает GIL), вы можете найти небольшое преимущество. Тем не менее,

import threading
import time

def begin_load_foo():
    global foo_thread
    foo_thread = threading.Thread(target=load_foo_thread)
    foo_thread.start()

def load_foo_thread():
    global foo
    print("start importing")
    foo = __import__('foo')
    print("done importing")

def wait_foo():
    print('wait')
    foo_thread.join()
    print('done')

def do_other_things():
    time.sleep(1)

begin_load_foo()
do_other_things()
wait_foo()
foo.bar()
...