Advertisement
pastebinUser555

Untitled

Jan 4th, 2019
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. import pymxs
  2. import threading
  3. import time
  4.  
  5. flag = True
  6. counter = 0
  7.  
  8. def callMXSEntry():
  9. with pymxs.mxstoken():
  10. #~ pymxs.runtime.Teapot()
  11. createTeaPots(0)
  12. def callMXSEntry1():
  13. with pymxs.mxstoken():
  14. #~ pymxs.runtime.Teapot()
  15. createTeaPots(1)
  16. def callMXSEntry2():
  17. with pymxs.mxstoken():
  18. #~ pymxs.runtime.Teapot()
  19. createTeaPots(2)
  20.  
  21. # Ex1 and Ex2 used to mark cooperator of mxstoken
  22. # when pymxs.mxstoken is gained
  23. # python codes are concurrence, but with pymxs.mxstoken blocks are not
  24. #
  25. def callMXSEntryEx1(locker, tick, evt):
  26. global flag, counter
  27.  
  28. try:
  29. locker.acquire()
  30. flag = False
  31. with pymxs.mxstoken():
  32. # pymxs.runtime.Teapot(Name="callMXSEntryEx1")
  33. createTeaPots(1)
  34. # give up lock, let Ex2 could exec codes
  35. locker.release()
  36. if not evt.wait(tick):
  37. pymxs.print_("Error: event untiggered\nwhich indicates 'with block' in Ex2 haven't finished\n", True, True)
  38. counter = 30
  39. except:
  40. pymxs.print_("Error: unexpected exception\n", True, True)
  41. raise
  42. finally:
  43. if locker.locked():
  44. locker.release()
  45.  
  46. def callMXSEntryEx2(locker, tick, evt):
  47. global flag, counter
  48. while flag:
  49. time.sleep(tick)
  50.  
  51. try:
  52. locker.acquire()
  53. # we expected this block is finished
  54. # before Ex1 wakeup from sleep
  55. for i in xrange(10):
  56. # only a indicator, could just assign counter = 10
  57. counter = counter + 1
  58. evt.set()
  59. with pymxs.mxstoken():
  60. # this block won't be executed after Ex1 with block finished
  61. #~ pymxs.runtime.Teapot(Name="callMXSEntryEx2")
  62. createTeaPots(2)
  63. if counter != 30:
  64. pymxs.print_("Error: expected counter 30, got %d\nwhich indicates 'with block' in Ex2 haven't finished\n" % counter, True, True)
  65. except:
  66. raise
  67. finally:
  68. if locker.locked():
  69. locker.release()
  70. pymxs.print_("succss", False, True)
  71.  
  72. def main():
  73. #~ locker = threading.Lock()
  74. #~ evt = threading.Event()
  75. t1 = threading.Thread(target=callMXSEntry)
  76. t2 = threading.Thread(target=callMXSEntry1)
  77. t3 = threading.Thread(target=callMXSEntry2)
  78. #t2 = threading.Thread(target=callMXSEntryEx1) #, args=(locker, 1, evt))
  79. #t3 = threading.Thread(target=callMXSEntryEx2) #, args=(locker, 0.01, evt))
  80. t1.start()
  81. t2.start()
  82. t3.start()
  83.  
  84. if __name__ == "__main__":
  85. # slow multithread method
  86. main()
  87.  
  88. # fast create instant method
  89. #~ createTeaPots(0)
  90. #~ createTeaPots(1)
  91. #~ createTeaPots(2)
  92.  
  93. def createTeaPots(amount=0):
  94. rt = pymxs.runtime
  95. if amount == 0:
  96. for x in range(20):
  97. rt.Teapot()
  98. if amount == 1:
  99. for x in range(20):
  100. rt.sphere()
  101. if amount == 2:
  102. for x in range(20):
  103. rt.Tube()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement