Так замедлить выполнение, вообще говоря, тривиальной задачи еще постараться надо.
Это я к тому, что ТС вообще-то нужны не терминологические споры, а производительный код.
Замедлился код, это разумеется, это же специально, для примера т.к. wait(дожидается пока одна задача отработает) и специально sleep(задержка) , это же пример, с демонстрацией особенностей, как вариант, куда ТС мог-бы попробовать копать.
Я слегка "поправил/изуродовал" этот код, чтобы наглядней была "параллельность" и время сравнить
#!/usr/bin/env python3
import asyncio
import time
import random
from datetime import datetime
def custom_sleep():
print('SLEEP', datetime.now())
time.sleep(1)
def factorial(name, number):
f = 1
for i in range(2, number+1):
print('Task {}: Compute factorial({})'.format(name, i))
custom_sleep()
f *= i
print('Task {}: factorial({}) is {}\n'.format(name, number, f))
async def custom_sleep_async(asynchr=False):
print('SLEEP', datetime.now())
await asyncio.sleep(1)
# await asyncio.sleep(random.randrange(1,5,1))
# await time.sleep(1)
async def factorial_async(name, number):
f = 1
for i in range(2, number+1):
print('Task {}: Compute factorial({})'.format(name, i))
#await custom_sleep()
await custom_sleep_async()
f *= i
print('Task {}: factorial({}) is {}\n'.format(name, number, f))
start = time.time()
#не парралельно
print("\n------------------------\nstart without asyncio \n start time: {}".format(start))
factorial("A", 3)
factorial("B", 4)
end = time.time()
print("end {} ; Total time : {}\n".format(end,end-start))
loop = asyncio.get_event_loop()
#tasks = [
# asyncio.ensure_future(factorial("A", 3)),
# asyncio.ensure_future(factorial("B", 4)),
#]
start = time.time()
#параллельно
print("\n------------------------\nstart with asyncio \n start time: {}".format(start))
features=asyncio.gather(factorial_async("A", 3),factorial_async("B", 4))
#loop.run_until_complete(asyncio.wait(tasks))
loop.run_until_complete(features)
loop.close()
end = time.time()
print("end {} ; Total time:{} \n".format(end,end-start))
вывод:
start without asyncio
start time: 1540209754.7767594
Task A: Compute factorial(2)
SLEEP 2018-10-22 16:02:34.776855
Task A: Compute factorial(3)
SLEEP 2018-10-22 16:02:35.778229
Task A: factorial(3) is 6
Task B: Compute factorial(2)
SLEEP 2018-10-22 16:02:36.779652
Task B: Compute factorial(3)
SLEEP 2018-10-22 16:02:37.781049
Task B: Compute factorial(4)
SLEEP 2018-10-22 16:02:38.782444
Task B: factorial(4) is 24
end 1540209759.7838647 ; Total time : 5.007105350494385
------------------------
start with asyncio
start time: 1540209759.7845988
Task B: Compute factorial(2)
SLEEP 2018-10-22 16:02:39.784975
Task A: Compute factorial(2)
SLEEP 2018-10-22 16:02:39.785099
Task B: Compute factorial(3)
SLEEP 2018-10-22 16:02:40.786684
Task A: Compute factorial(3)
SLEEP 2018-10-22 16:02:40.786846
Task B: Compute factorial(4)
SLEEP 2018-10-22 16:02:41.788436
Task A: factorial(3) is 6
Task B: factorial(4) is 24
end 1540209762.7905009 ; Total time:3.005902051925659
видно, что работают в одно и тоже время "параллельно". последовательно занимает 5сек, а параллельно 3. несложно это приспособить куда надо. Этот asyncio,
можно также комбинировать с
concurrent.futures и ещё
примеры, так можно добиться того, что нужно. в разных потоках и пр. А более конкретно, чтобы с конкретным кодом, так для этого нужна конкретная задача.
Про терминологию, тут именно терминологическая путаница. это concurrent code.
Цитата:
For instance, The Art of Concurrency defines the difference as follows:
A system is said to be concurrent if it can support two or more actions in progress at the same time. A system is said to be parallel if it can support two or more actions executing simultaneously. The key concept and difference between these definitions is the phrase "in progress."
This definition says that, in concurrent systems, multiple actions can be in progress (may not be executed) at the same time. Meanwhile, multiple actions are simultaneously executed in parallel systems. In fact, concurrency and parallelism are conceptually overlapped to some degree, but "in progress" clearly makes them different.
https://takuti.me/note/parallel-vs-concurrent/видео на тему -
'Concurrency Is Not Parallelism' Эти понятия слегка различаются особенностями, но оба про "параллельность" в том смысле, что задачи исполняются одновременно, в одно и тоже время. Поэтому я и сказал, что "асинхронность" это по сути разновидность "параллельности". это грубо, но убежден, что близко к истине. Просто concurrency дает больше возможностей и позволяет более эффективно решать задачи.
-- 22.10.2018, 15:26 --Если бы фьючерсы считались параллельно, то в вашем примере sleep'ы в A и B запускались одновременно.
Посмотрите, последний мой пример. там нам наглядней параллельность. и всё что я думаю по теме изложил.