Я хочу использовать как ThreadPoolExecutor
из concurrent.futures
, так и асинхронные функции.
Моя программа неоднократно отправляет функцию с различными входными значениями в пул потоков.Окончательная последовательность задач, которые выполняются в этой более крупной функции, может быть в любом порядке, и меня не волнует возвращаемое значение, просто они выполняются в какой-то момент в будущем.
Поэтому я попыталсясделать это
async def startLoop():
while 1:
for item in clients:
arrayOfFutures.append(await config.threadPool.submit(threadWork, obj))
wait(arrayOfFutures, timeout=None, return_when=ALL_COMPLETED)
, где переданная функция:
async def threadWork(obj):
bool = do_something() # needs to execute before next functions
if bool:
do_a() # can be executed at any time
do_b() # ^
, где do_b
и do_a
- асинхронные функции. Проблема в том, что я получаю ошибку: TypeError: object Future can't be used in 'await' expression
и если я удаляю await, я получаю еще одну ошибку, говоря, что мне нужно добавить await
.
Я думаю, я мог бы заставить все использовать потоки, но я действительно не хочу этого делать.