updated threading example to use Event object instead of user defined Signal instance
This commit is contained in:
@@ -11,19 +11,14 @@ import time
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
class Signal: # <1>
|
def spin(msg, done): # <2>
|
||||||
go = True
|
|
||||||
|
|
||||||
|
|
||||||
def spin(msg, signal): # <2>
|
|
||||||
write, flush = sys.stdout.write, sys.stdout.flush
|
write, flush = sys.stdout.write, sys.stdout.flush
|
||||||
for char in itertools.cycle('|/-\\'): # <3>
|
for char in itertools.cycle('|/-\\'): # <3>
|
||||||
status = char + ' ' + msg
|
status = char + ' ' + msg
|
||||||
write(status)
|
write(status)
|
||||||
flush()
|
flush()
|
||||||
write('\x08' * len(status)) # <4>
|
write('\x08' * len(status)) # <4>
|
||||||
time.sleep(.1)
|
if done.wait(.1): # <5>
|
||||||
if not signal.go: # <5>
|
|
||||||
break
|
break
|
||||||
write(' ' * len(status) + '\x08' * len(status)) # <6>
|
write(' ' * len(status) + '\x08' * len(status)) # <6>
|
||||||
|
|
||||||
@@ -35,13 +30,13 @@ def slow_function(): # <7>
|
|||||||
|
|
||||||
|
|
||||||
def supervisor(): # <9>
|
def supervisor(): # <9>
|
||||||
signal = Signal()
|
done = threading.Event()
|
||||||
spinner = threading.Thread(target=spin,
|
spinner = threading.Thread(target=spin,
|
||||||
args=('thinking!', signal))
|
args=('thinking!', done))
|
||||||
print('spinner object:', spinner) # <10>
|
print('spinner object:', spinner) # <10>
|
||||||
spinner.start() # <11>
|
spinner.start() # <11>
|
||||||
result = slow_function() # <12>
|
result = slow_function() # <12>
|
||||||
signal.go = False # <13>
|
done.set() # <13>
|
||||||
spinner.join() # <14>
|
spinner.join() # <14>
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|||||||
@@ -11,19 +11,14 @@ import time
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
class Signal: # <1>
|
def spin(msg, done): # <2>
|
||||||
go = True
|
|
||||||
|
|
||||||
|
|
||||||
def spin(msg, signal): # <2>
|
|
||||||
write, flush = sys.stdout.write, sys.stdout.flush
|
write, flush = sys.stdout.write, sys.stdout.flush
|
||||||
for char in itertools.cycle('|/-\\'): # <3>
|
for char in itertools.cycle('|/-\\'): # <3>
|
||||||
status = char + ' ' + msg
|
status = char + ' ' + msg
|
||||||
write(status)
|
write(status)
|
||||||
flush()
|
flush()
|
||||||
write('\x08' * len(status)) # <4>
|
write('\x08' * len(status)) # <4>
|
||||||
time.sleep(.1)
|
if done.wait(.1): # <5>
|
||||||
if not signal.go: # <5>
|
|
||||||
break
|
break
|
||||||
write(' ' * len(status) + '\x08' * len(status)) # <6>
|
write(' ' * len(status) + '\x08' * len(status)) # <6>
|
||||||
|
|
||||||
@@ -35,13 +30,13 @@ def slow_function(): # <7>
|
|||||||
|
|
||||||
|
|
||||||
def supervisor(): # <9>
|
def supervisor(): # <9>
|
||||||
signal = Signal()
|
done = threading.Event()
|
||||||
spinner = threading.Thread(target=spin,
|
spinner = threading.Thread(target=spin,
|
||||||
args=('thinking!', signal))
|
args=('thinking!', done))
|
||||||
print('spinner object:', spinner) # <10>
|
print('spinner object:', spinner) # <10>
|
||||||
spinner.start() # <11>
|
spinner.start() # <11>
|
||||||
result = slow_function() # <12>
|
result = slow_function() # <12>
|
||||||
signal.go = False # <13>
|
done.set() # <13>
|
||||||
spinner.join() # <14>
|
spinner.join() # <14>
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user