###### tags: `python` `threading`
# Threading
## solve problems
>[file name ≠ threading](https://stackoverflow.com/questions/41012121/attributeerror-module-object-has-no-attribute-rlock)

## Added a job
```python=
import threading
def threadJob():
print("this job displays current thread, number is %s" %threading.currentThread())
def main():
addedThread=threading.Thread(target=threadJob)
addedThread.start()
# to tell us how many threading
print(threading.activeCount())
# to tell us threading name
print(threading.enumerate()) #enumerate 列舉
# to tell us currently execute threads
print(threading.currentThread())
if __name__ == '__main__':
main()
```
## join()
to control threading executed sequence
```python=
import threading
import time
def thread1():
print("T1 start\n")
for i in [3,2,1]:
print(i)
time.sleep(1)
print("T1 all down\n")
def thread2():
print("T2 start\n")
for i in [5,4,3,2,1]:
print(i)
time.sleep(1)
print("T2 all down\n")
def main():
addedThread1=threading.Thread(target=thread1,name="T1")
addedThread2=threading.Thread(target=thread2,name="T2")
addedThread1.start()
addedThread2.start()
addedThread1.join() # join, it will wait for the subthread to execute completely and it will execute follow programs
addedThread2.join()
print("main finished\n")
if __name__ == '__main__':
main()
```
>join()
It will wait for the subthread to execute completely and it will execute follow programs
## mult-threading computing
```python=
import threading
from queue import Queue
import time
list =[[1,2,3,4],[4,5,6,7],[8,9,10,11],[12,12,12,12]]
def job(list,q):
for i in range(len(list)):
list[i] = list[i]**2
time.sleep(1)
print(f'through compute time is {i}')
q.put(list)
def multithreading():
q=Queue()
threads=[]
for i in range(4):
thread=threading.Thread(target=job,args=(list[i],q))
thread.start()
threads.append(thread)
for thread in threads:
threads =thread.join()
result=[]
for i in range(4):
result.append(q.get())
print(result)
print("We didn't wait 12 seconds to complete computing if we use multi-threding to compute")
if __name__ =="__main__":
multithreading()
```
>Remark:
>In multi-threading didn't return values
>So, we use Queue instead of the return