import threading
import time
def stopky(cas):
nazov = threading.current_thread().name
for i in range(cas):
print(f'{nazov}: {i} s')
time.sleep(1)
stopky(3)
MainThread: 0 s MainThread: 1 s MainThread: 2 s
t = threading.Thread(target=stopky, args=3)
t
<Thread(Thread-14, initial)>
t.start()
Exception in thread Thread-14: Traceback (most recent call last): File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\threading.py", line 980, in _bootstrap_inner self.run() File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\threading.py", line 917, in run self._target(*self._args, **self._kwargs) TypeError: __main__.stopky() argument after * must be an iterable, not int
t = threading.Thread(target=stopky, args=(3))
t.start()
Exception in thread Thread-15: Traceback (most recent call last): File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\threading.py", line 980, in _bootstrap_inner self.run() File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\threading.py", line 917, in run self._target(*self._args, **self._kwargs) TypeError: __main__.stopky() argument after * must be an iterable, not int
t = threading.Thread(target=stopky, args=(5, )) #vytvori nove vlakno
t
<Thread(Thread-6, initial)>
t.start() #spustenie vlakna
Thread-6: 0 s
t.is_alive() # zistenie ci vlakno este bezi
True
Thread-6: 1 s Thread-6: 2 s
t.is_alive()
False
t.join() #pocka na skoncenie vlakna
Thread-6: 3 s Thread-6: 4 s
vlakna = [threading.Thread(target=stopky, args=(5, )) for _ in range(7)]
vlakna
[<Thread(Thread-7, initial)>, <Thread(Thread-8, initial)>, <Thread(Thread-9, initial)>, <Thread(Thread-10, initial)>, <Thread(Thread-11, initial)>, <Thread(Thread-12, initial)>, <Thread(Thread-13, initial)>]
for vlakno in vlakna:
vlakno.start()
Thread-7: 0 s Thread-8: 0 s Thread-9: 0 s Thread-10: 0 s Thread-11: 0 s Thread-12: 0 s Thread-13: 0 s Thread-8: 1 s Thread-10: 1 s Thread-11: 1 s Thread-7: 1 s Thread-9: 1 s Thread-12: 1 s Thread-13: 1 s Thread-10: 2 s Thread-7: 2 s Thread-8: 2 s Thread-9: 2 s Thread-11: 2 s Thread-12: 2 s Thread-13: 2 s Thread-9: 3 s Thread-11: 3 s Thread-8: 3 s Thread-7: 3 s Thread-10: 3 s Thread-12: 3 s Thread-13: 3 s Thread-10: 4 sThread-11: 4 s Thread-9: 4 s Thread-8: 4 s Thread-7: 4 s Thread-13: 4 s Thread-12: 4 s
from random import randint, randrange
#https://python.readthedocs.io/en/latest/library/random.html#functions-for-integers
randint(10, 20) #interval uzavrety z oboch stran
13
randrange(10, 20)
12
print(*range(3, 7)) # interval zlava uzavrety, ekvivalent for (int i=3; i<7; i++)
3 4 5 6
vlakna = [threading.Thread(target=stopky, args=(randrange(3, 7), )) for _ in range(7)]
for vlakno in vlakna:
vlakno.start()
#pocka kym skoncia vsetky vlakna
for vlakno in vlakna:
vlakno.join()
Thread-23: 0 s Thread-24: 0 s Thread-25: 0 s Thread-26: 0 s Thread-27: 0 s Thread-28: 0 s Thread-29: 0 s Thread-28: 1 s Thread-24: 1 s Thread-23: 1 s Thread-26: 1 s Thread-25: 1 s Thread-29: 1 s Thread-27: 1 s Thread-27: 2 s Thread-28: 2 s Thread-26: 2 s Thread-25: 2 s Thread-29: 2 s Thread-23: 2 s Thread-24: 2 s Thread-23: 3 s Thread-24: 3 s Thread-26: 3 s Thread-29: 3 s Thread-28: 3 s Thread-23: 4 s Thread-26: 4 s
zdielana = 0
def race_condition(pocet):
for _ in range(pocet)
zdielana += 1
race_condition(100)
File "C:\Users\pc12\AppData\Local\Temp\ipykernel_15144\3260346202.py", line 2 for _ in range(pocet) ^ SyntaxError: invalid syntax
def race_condition(pocet):
for _ in range(pocet):
zdielana += 1
race_condition(100)
--------------------------------------------------------------------------- UnboundLocalError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_15144\603179023.py in <cell line: 5>() 3 zdielana += 1 4 ----> 5 race_condition(100) ~\AppData\Local\Temp\ipykernel_15144\603179023.py in race_condition(pocet) 1 def race_condition(pocet): 2 for _ in range(pocet): ----> 3 zdielana += 1 4 5 race_condition(100) UnboundLocalError: local variable 'zdielana' referenced before assignment
def race_condition(pocet):
global zdielana #chceme pouzivat globalnu premennu
for _ in range(pocet):
zdielana += 1
race_condition(100)
print(zdielana)
100
vlakna = [threading.Thread(target=race_condition, args=(50, )) for _ in range(10)]
for vlakno in vlakna:
vlakno.start()
print(zdielana)
600
#SKUSME VIAC
zdielana = 0
vlakna = [threading.Thread(target=race_condition, args=(10000, )) for _ in range(10)]
for vlakno in vlakna:
vlakno.start()
print(zdielana)
100000
zdielana = 0
vlakna = [threading.Thread(target=race_condition, args=(1000000, )) for _ in range(10)]
for vlakno in vlakna:
vlakno.start()
print(zdielana)
7572429
print(zdielana)
7764760
print(zdielana)
7764760
zdielana = 0
vlakna = [threading.Thread(target=race_condition, args=(10000000, )) for _ in range(10)]
for vlakno in vlakna:
vlakno.start()
for _ in range(10):
print(zdielana)
time.sleep(0.01)
7223777 11279586 11529376 14327260 15061528 7176467 14046733 15312394 15813420 17021552
print(zdielana)
24854558
[vlakno.is_alive() for vlakno in vlakna]
[False, False, False, False, False, False, False, False, False, False]
zdielana = 0
vlakna = [threading.Thread(target=race_condition, args=(10000000, )) for _ in range(10)]
for vlakno in vlakna:
vlakno.start()
for _ in range(10):
print(zdielana, [vlakno.is_alive() for vlakno in vlakna])
time.sleep(0.01)
13052827 [True, True, False, True, True, True, True, True, True, True] 9009666 [True, True, False, True, True, True, True, True, True, True] 16555241 [True, True, False, False, True, True, True, True, True, True] 17054667 [True, True, False, False, False, True, True, True, True, True] 18800766 [True, True, False, False, False, True, True, True, True, True] 20414630 [True, True, False, False, False, True, True, True, False, True] 15346704 [True, True, False, False, False, True, True, True, False, True] 20288019 [False, True, False, False, False, True, True, True, False, True] 14509022 [False, True, False, False, False, True, True, True, False, True] 14742553 [False, True, False, False, False, True, True, True, False, True]
zdielana = 0
vlakna = [threading.Thread(target=race_condition, args=(10000000, )) for _ in range(10)]
for vlakno in vlakna:
vlakno.start()
for _ in range(10):
print(zdielana, *['Y' if vlakno.is_alive() else 'N' for vlakno in vlakna])
time.sleep(0.01)
3085779 Y Y Y Y Y Y Y Y Y Y 5516796 Y Y Y Y Y Y Y Y Y Y 8370509 Y Y Y Y Y Y Y Y Y Y 9382205 Y Y Y Y Y Y Y Y Y Y 5505678 Y Y Y Y Y Y Y Y Y Y 9494193 Y Y Y Y Y Y Y Y Y Y 9741318 Y Y Y Y Y Y Y Y Y Y 7982234 N Y Y Y Y Y N Y Y Y 12705239 N Y Y Y Y Y N Y Y Y 9664130 N Y Y Y Y Y N Y Y Y
['Y' if vlakno.is_alive() else 'N' for vlakno in vlakna]
['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N']
[1 if vlakno.is_alive() else 0 for vlakno in vlakna]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1 for vlakno in vlakna if vlakno.is_alive()]
[]
zdielana = 0
vlakna = [threading.Thread(target=race_condition, args=(10000000, )) for _ in range(10)]
for vlakno in vlakna:
vlakno.start()
for _ in range(10):
print(zdielana,
sum([1 for vlakno in vlakna if vlakno.is_alive()]),
*['Y' if vlakno.is_alive() else 'N' for vlakno in vlakna])
time.sleep(0.01)
8920701 10 Y Y Y Y Y Y Y Y Y Y 7186968 10 Y Y Y Y Y Y Y Y Y Y 8165081 10 Y Y Y Y Y Y Y Y Y Y 8527966 10 Y Y Y Y Y Y Y Y Y Y 8259368 10 Y Y Y Y Y Y Y Y Y Y 9968291 10 Y Y Y Y Y Y Y Y Y Y 10952493 10 Y Y Y Y Y Y Y Y Y Y 10205003 10 Y Y Y Y Y Y Y Y Y Y 11961002 10 Y Y Y Y Y Y Y Y Y Y 10190824 10 Y Y Y Y Y Y Y Y Y Y
zdielana = 0
vlakna = [threading.Thread(target=race_condition, args=(10000000, )) for _ in range(10)]
for vlakno in vlakna:
vlakno.start()
for _ in range(10):
print(zdielana,
len(['Y' for vlakno in vlakna if vlakno.is_alive()]),
*['Y' if vlakno.is_alive() else 'N' for vlakno in vlakna])
time.sleep(0.01)
9171391 10 Y Y Y Y Y Y Y Y Y Y 10165312 10 Y Y Y Y Y Y Y Y Y Y 9122674 10 Y Y Y Y Y Y Y Y Y Y 12091057 10 Y Y Y Y Y Y Y Y Y Y 12533011 8 Y Y N N Y Y Y Y Y Y 14016043 5 N Y N N N Y Y Y N Y 13918665 5 N Y N N N Y Y Y N Y 14649361 5 N Y N N N Y Y Y N Y 14168407 5 N Y N N N Y Y Y N Y 14895443 5 N Y N N N Y Y Y N Y
zdielana = 0
vlakna = [threading.Thread(target=race_condition, args=(10000000, )) for _ in range(10)]
for vlakno in vlakna:
vlakno.start()
while len(['Y' for vlakno in vlakna if vlakno.is_alive()]) > 0:
print(zdielana, end=" ")
print(len(['Y' for vlakno in vlakna if vlakno.is_alive()]), end=" ")
print(*['Y' if vlakno.is_alive() else 'N' for vlakno in vlakna])
#Mohlo by sa stat, ze podrobny vypis bude obsahovat menej beziacich vlakien
time.sleep(0.01)
print(zdielana)
15185643 8 N N Y Y Y Y Y Y Y Y 14920805 8 N N Y Y Y Y Y Y Y Y 15671090 8 N N Y Y Y Y Y Y Y Y 16413728 8 N N Y Y Y Y Y Y Y Y 17221318 8 N N Y Y Y Y Y Y Y Y 16397127 8 N N Y Y Y Y Y Y Y Y 16643184 8 N N Y Y Y Y Y Y Y Y 14341219 7 N N N Y Y Y Y Y Y Y 19881199 7 N N N Y Y Y Y Y Y Y 16892982 6 N N N Y Y Y N Y Y Y 21578795 6 N N N Y Y Y N Y Y Y 19060648 6 N N N Y Y Y N Y Y Y 19103465 6 N N N Y Y Y N Y Y Y 19095869 6 N N N Y Y Y N Y Y Y 20475572 4 N N N Y Y Y N N N Y 20934656 4 N N N Y Y Y N N N Y 21429184 4 N N N Y Y Y N N N Y 21918530 4 N N N Y Y Y N N N Y 22343641 3 N N N N Y Y N N N Y 21485029 3 N N N N Y Y N N N Y 22069057 3 N N N N Y Y N N N Y 21734886 3 N N N N Y Y N N N Y 22231466 3 N N N N Y Y N N N Y 22282998 3 N N N N Y Y N N N Y 22693605 2 N N N N Y N N N N Y 22995494 2 N N N N Y N N N N Y 22949249 2 N N N N Y N N N N Y 23686021 2 N N N N Y N N N N Y 24183975 2 N N N N Y N N N N Y 25066383 1 N N N N Y N N N N N 25260098 1 N N N N Y N N N N N 25976117 1 N N N N Y N N N N N 26058339
zdielana = 0
vlakna = [threading.Thread(target=race_condition, name=f'#{i}', args=(10000000, )) for i in range(10)]
for vlakno in vlakna:
vlakno.start()
aktivne = [ 'START' ]
while len(aktivne) > 0:
aktivne = [vlakno.name for vlakno in vlakna if vlakno.is_alive()]
print(f'{zdielana:10d} {len(aktivne):02d}/{len(vlakna)}', *aktivne)
#Mohlo by sa stat, ze podrobny vypis bude obsahovat menej beziacich vlakien
time.sleep(0.01)
print(zdielana)
7743185 10/10 #0 #1 #2 #3 #4 #5 #6 #7 #8 #9 9026016 10/10 #0 #1 #2 #3 #4 #5 #6 #7 #8 #9 10000419 10/10 #0 #1 #2 #3 #4 #5 #6 #7 #8 #9 12313196 10/10 #0 #1 #2 #3 #4 #5 #6 #7 #8 #9 10871799 09/10 #1 #2 #3 #4 #5 #6 #7 #8 #9 12565029 09/10 #1 #2 #3 #4 #5 #6 #7 #8 #9 13547615 09/10 #1 #2 #3 #4 #5 #6 #7 #8 #9 13536606 08/10 #1 #3 #4 #5 #6 #7 #8 #9 16725147 07/10 #3 #4 #5 #6 #7 #8 #9 17221552 07/10 #3 #4 #5 #6 #7 #8 #9 14733335 07/10 #3 #4 #5 #6 #7 #8 #9 17230185 07/10 #3 #4 #5 #6 #7 #8 #9 17955858 07/10 #3 #4 #5 #6 #7 #8 #9 16388236 07/10 #3 #4 #5 #6 #7 #8 #9 16143800 07/10 #3 #4 #5 #6 #7 #8 #9 17408620 07/10 #3 #4 #5 #6 #7 #8 #9 17174521 07/10 #3 #4 #5 #6 #7 #8 #9 16851738 07/10 #3 #4 #5 #6 #7 #8 #9 18013969 04/10 #3 #4 #5 #9 19486251 04/10 #3 #4 #5 #9 17718942 04/10 #3 #4 #5 #9 18531541 04/10 #3 #4 #5 #9 19276036 04/10 #3 #4 #5 #9 19784570 04/10 #3 #4 #5 #9 20939443 04/10 #3 #4 #5 #9 20713833 04/10 #3 #4 #5 #9 21179885 04/10 #3 #4 #5 #9 21664847 04/10 #3 #4 #5 #9 21409652 03/10 #3 #5 #9 22380990 03/10 #3 #5 #9 22630108 03/10 #3 #5 #9 22823327 02/10 #3 #9 23587322 02/10 #3 #9 23579636 02/10 #3 #9 24057396 02/10 #3 #9 25230675 01/10 #9 25482274 01/10 #9 25968212 01/10 #9 25978523 00/10 25978523
#vlakna mozeme aj pomenovat
vlakna = [threading.Thread(target=race_condition,
args=(1_000_000,),
name=f'rc-{i}') for i in range(10)]
for vlakno in vlakna:
vlakno.start()
for vlakno in vlakna:
print(vlakno.name)
rc-0 rc-1 rc-2 rc-3 rc-4 rc-5 rc-6 rc-7 rc-8 rc-9
!python --version
Python 3.9.16