project.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import pydux
  2. import asyncio
  3. import time
  4. import threading
  5. import counter
  6. import calculate
  7. import pydux_thunk
  8. def loop_in_thread(loop):
  9. async def main_task():
  10. print('Starting loop')
  11. while True:
  12. await asyncio.sleep(1)
  13. pending = asyncio.Task.all_tasks()
  14. my_sum = 0
  15. for task in pending:
  16. if not task.done():
  17. my_sum += 1
  18. if my_sum == 1:
  19. break
  20. print('All tasks finished, exiting loop.')
  21. asyncio.set_event_loop(loop)
  22. loop.run_until_complete(main_task())
  23. loop.close()
  24. loop = asyncio.get_event_loop()
  25. t = threading.Thread(target=loop_in_thread, args=(loop,))
  26. t.start()
  27. def log_middleware(store):
  28. def wrapper(next_):
  29. def log_dispatch(action):
  30. print('Dispatch Action:', action)
  31. return next_(action)
  32. return log_dispatch
  33. return wrapper
  34. initial_state = {
  35. 'counter': counter.initial_state,
  36. 'calculate': calculate.initial_state
  37. }
  38. root_reducer = pydux.combine_reducers({
  39. 'counter': counter.reducer,
  40. 'calculate': calculate.reducer
  41. })
  42. middleware = pydux.apply_middleware(log_middleware, pydux_thunk.middleware)
  43. store = pydux.create_store(root_reducer, initial_state, middleware)
  44. def my_subscriber():
  45. print('Current state', store.get_state())
  46. store.subscribe(my_subscriber)
  47. print('starting.')
  48. store.dispatch(counter.ActionCreators.increment())
  49. store.dispatch(counter.ActionCreators.increment())
  50. store.dispatch(counter.ActionCreators.increment())
  51. store.dispatch(calculate.ActionCreators.calculate(3, 4))
  52. #store.dispatch(my_thunk(4))
  53. time.sleep(2)
  54. #store.dispatch(ActionCreators.decrement())
  55. #store.dispatch(my_thunk(3))
  56. time.sleep(1)
  57. #store.dispatch(my_bump())
  58. while loop.is_running():
  59. time.sleep(1)
  60. print('Loop done, closing task.')
  61. t.join()
  62. print('Task finished, bye!')