Почему моя асинхронная версия моего python скрипта не быстрее синхронной версии? - PullRequest
0 голосов
/ 04 августа 2020

Я только начинаю экспериментировать с библиотекой asyncio в python. Моя цель - ускорить мой код, однако с моим первым скриптом на самом деле нет улучшений, чем при использовании без asyncio. 1006 * Я бы подумал, что асинхронная версия запускает все вызовы price () одновременно, что сокращает время выполнения программы? Я что-то делаю не так?

Спасибо

1 Ответ

3 голосов
/ 04 августа 2020

Вы не сделали здесь ничего плохого. Однако ваше понимание asyn c в python ошибочно.

Python не может делать две вещи одновременно из-за GIL. Это невозможно. Вы можете имитировать выполнение нескольких задач с помощью python потоков и asyn c, но это не настоящая многозадачность. Если вам нужна настоящая многозадачность, вам нужно будет использовать модуль multiprocessing в python, но это выходит за рамки этого вопроса.

То есть в основном в asyn c, когда вы ожидаете функцию, которую вы указываете python эй, этот вызов делает что-то, что потребует времени, прежде чем он вернется, однако это ожидание означает, что python ничего не вычисляет, он буквально чего-то ждет, например, выполняет задачи, связанные с вводом-выводом, а не задачи ЦП. Ваша программа здесь на 100% связана с процессором, так как вы не ждете, пока диск что-то найдет или не отправляете / не получаете данные по сети с помощью функции asyn c.

Это говорит ваша программа. Я вызову si.get_live_price(stock) неасинхронную c функцию и буду ждать (а не ждать) результата. После этого я буду asyn c спать в течение 0,001, чтобы кто-то другой мог работать, но после 0,001 больше никто не может работать, потому что мне снова нужен контроль, поэтому я могу завершить sh, распечатав на консоли. После того, как он напечатан, python теперь будет сосредоточен на следующей задаче, которая повторит вышеуказанные шаги.

Это топи c, которое может занять некоторое время, чтобы полностью понять, но мой совет - найти разницу между параллелизмом и параллелизмом в python.

...