Общая стратегия для программ, основанных на событиях, которые должны выполнять длинные вычисления, является одной из следующих:
- разбить вычисления на небольшие куски, которые занимают не более нескольких десятков миллисекунд, а затем запланироватьих запускать один за другим, когда цикл событий простаивает.Помните: цикл обработки событий - это просто цикл, поэтому, если ваши длительные вычисления - просто огромный цикл сложного и быстрого кода, пусть цикл обработки событий будет вашим циклом.
- поместите долгосрочные вычисления в отдельный поток и попросите этот поток передать свои результаты обратно в главный поток потокобезопасным способом
- поместите долгосрочные вычисления в отдельный процесс иэтот процесс отправляет обновления обратно в ваш основной процесс
Первый способ идеален, если вы можете им управлять.Мое личное предпочтение тогда идет к третьему методу.Следует избегать использования потоков IMO, если это вообще возможно, если только вы не занимаетесь программированием потоков (и даже тогда я обычно рекомендую отдельный процесс).