from collections import deque
def async_sum(func_id, n):
res = 0
for i in range(n):
res = res + 1
print('Function id:{},step:{}'.format(func_id, i))
yield
return res
a = async_sum('函式一', 3)
b = async_sum('函式二', 4)
# next(a)
# next(b)
# next(a)
# next(b)
# next(a)
# next(b)
class Task:
next_id = 0
def __init__(self, routine):
self.id = Task.next_id
Task.next_id += 1
self.routine = routine
class Scheduler:
def __init__(self):
self.runnable_tasks = deque()
self.completed_task_result = {}
self.failed_task_error = {}
def add(self, routine):
task = Task(routine)
self.runnable_tasks.append(task)
return task.id
def run_to_completion(self):
while len(self.runnable_tasks) != 0:
task = self.runnable_tasks.popleft()
print('Running task{}'.format(task.id), end='')
try:
yielded = next(task.routine)
except StopIteration as stopped:
print('completed with result{!r}'.format(stopped.value))
self.completed_task_result[task.id] = stopped.value
except Exception as e:
print('failed with exception:{}'.format(e))
self.failed_task_error[task.id] = e
else:
assert yielded is None
print('now yielded')
self.runnable_tasks.append(task)
scheduler = Scheduler()
scheduler.add(a)
scheduler.add(b)
scheduler.run_to_completion()
複製程式碼
yield實現非同步 demo_code
相關文章
- Python yield與實現Python
- python中非同步非阻塞如何實現Python非同步
- tornado原理介紹及非同步非阻塞實現方式非同步
- python協程(yield、asyncio標準庫、gevent第三方)、非同步的實現Python非同步
- 【Python】迭代器、生成器、yield單執行緒非同步併發實現詳解Python執行緒非同步
- 非同步程式設計之使用yield from非同步程式設計
- Flutter Bloc 03 - 基礎物件 同步、非同步 await yield 操作FlutterBloC物件非同步AI
- 同步非同步,阻塞非阻塞非同步
- 非同步、同步、阻塞、非阻塞非同步
- 同步、非同步、阻塞、非阻塞非同步
- 同步非同步 與 阻塞非阻塞非同步
- 理解阻塞、非阻塞、同步、非同步非同步
- 同步、非同步,阻塞、非阻塞理解非同步
- 同步、非同步、阻塞與非阻塞非同步
- 同步、非同步、阻塞和非阻塞非同步
- [原譯]實現IEnumerable介面&理解yield關鍵字
- 【python】非同步IO | 協程 | asyncio | await | yieldPython非同步AI
- [轉]阻塞/非阻塞與同步/非同步非同步
- 同步與非同步 阻塞與非阻塞非同步
- java同步非阻塞IOJava
- 非同步和非阻塞非同步
- 同步、非同步、阻塞、非阻塞的區別非同步
- PHP實現非同步PHP非同步
- Node中非同步和同步的實現非同步
- 徹底搞懂同步非同步與阻塞非阻塞非同步
- IO - 同步 非同步 阻塞 非阻塞的區別非同步
- 同步、非同步、阻塞、非阻塞的簡單理解非同步
- 同步與非同步、阻塞與非阻塞的理解非同步
- CyclicBarrier – 同步屏障實現分析
- Java實現非同步呼叫Java非同步
- CyclicBarrier - 同步屏障實現分析
- CoLAKE: 如何實現非結構性語言和結構性知識表徵的同步訓練
- 同步阻塞、同步非阻塞、多路複用的介紹
- php yieldPHP
- [Javascript] yield*JavaScript
- linux rsync +inotify 實現 實時同步Linux
- 使用async實現非同步控制非同步
- JS實現非同步timeoutJS非同步