def __init__(self, group=None, target=None, name=None,
args=(), kwargs=None, *, daemon=None):
"""This constructor should always be called with keyword arguments. Arguments are:
*group* should be None; reserved for future extension when a ThreadGroup
class is implemented.
*target* is the callable object to be invoked by the run()
method. Defaults to None, meaning nothing is called.
*name* is the thread name. By default, a unique name is constructed of
the form "Thread-N" where N is a small decimal number.
*args* is the argument tuple for the target invocation. Defaults to ().
*kwargs* is a dictionary of keyword arguments for the target
invocation. Defaults to {}.
If a subclass overrides the constructor, it must make sure to invoke
the base class constructor (Thread.__init__()) before doing anything
else to the thread.
import threading
import time
balance = 0
lock = threading.Lock()
def change_it(name1,n):
global balance
balance = balance + n
balance = balance - n
print("%d %s: %d " % (n ,name1, balance))
def print_time(delay,name1):
while(1):
for i in range(100000):
time.sleep(0.1)
lock.acquire()
try:
change_it(name1,i)
finally :
lock.release()
try:
t = threading.Thread(target=print_time,args=(1,"LoopThread"))
t2 = threading.Thread(target=print_time,args=(1,"Loopxxad2"))
t3 = threading.Thread(target=print_time,args=(2,"Loopx3333"))
t.start()
t2.start()
t3.start()
t.join()
t2.join()
t3.join()
except:
print("Error: unable to start thread")
while (1):
pass