%%writefile pds-rc.py
import threading
import time
zdielana = 0
def race_condition(pocet):
global zdielana #chceme pouzivat globalnu premennu
for _ in range(pocet):
zdielana += 1 #zdielana = zdielana+1
#vlakna mozeme aj pomenovat
vlakna = [threading.Thread(target=race_condition, 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(zdielana, len(aktivne))
#Mohlo by sa stat, ze podrobny vypis bude obsahovat menej beziacich vlakien
time.sleep(0.1)
print(zdielana)
Overwriting pds-rc.py
!python --version
Python 3.11.5
!C:\Python35\python.exe --version
Python 3.5.2
%%time
!C:\Python35\python.exe pds-rc.py
12223497 9 12297056 9 13883048 9 12543257 9 13349391 9 13602566 9 13885503 8 18349673 8 19241341 5 19418516 4 19925907 4 21518745 3 22423142 2 23748499 1 24370097 0 24370097 CPU times: total: 0 ns Wall time: 6.37 s
%%writefile pds-rc,zamok.py
import threading
import time
zdielana = 0
def race_condition_zamok(zamok, pocet):
global zdielana #chceme pouzivat globalnu premennu
for _ in range(pocet):
zamok.acquire()
zdielana += 1 #zdielana = zdielana+1
zamok.release()
zam = threading.Lock() #vytvorenie zamku
vlakna = [threading.Thread(target=race_condition_zamok,
args=(zam, 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(zdielana, len(aktivne))
#Mohlo by sa stat, ze podrobny vypis bude obsahovat menej beziacich vlakien
time.sleep(0.1)
print(zdielana)
Overwriting pds-rc,zamok.py
%%time
!C:\Python35\python.exe pds-rc,zamok.py
360239 10 388049 10 417686 10 447489 10 476632 10 506061 10 535789 10 565279 10 603908 10 634320 10 664039 10 693149 10 722659 10 752298 10 782246 10 811537 10 841274 10 870192 10 CPU times: total: 15.6 ms Wall time: 5min 57s 899750 10 928983 10 959795 10 989363 10 1019032 10 1048345 10 1077724 10 1107270 10 1136818 10 1166399 10 1195981 10 1225331 10 1255038 10 1284179 10 1313896 10 1343461 10 1373113 10 1402180 10 1431755 10 1461436 10 1490343 10 1519868 10 1549432 10 1579131 10 1608235 10 1637791 10 1667595 10 1697368 10 1726757 10 1756699 10 1786226 10 1816084 10 1845625 10 1874997 10 1904792 10 1934194 10 1963555 10 1993060 10 2022712 10 2052465 10 2082067 10 2111385 10 2141026 10 2170179 10 2200064 10 2229593 10 2259652 10 2289107 10 2318780 10 2348643 10 2378575 10 2408112 10 2437156 10 2467189 10 2496934 10 2526265 10 2555940 10 2584764 10 2614451 10 2643850 10 2673701 10 2703244 10 2732729 10 2762156 10 2791579 10 2821000 10 2850717 10 2880770 10 2910854 10 2940010 10 2970763 10 3000341 10 3030159 10 3059546 10 3089026 10 3118293 10 3147291 10 3232531 10 3261182 10 3290421 10 3319849 10 3348804 10 3378071 10 3407723 10 3437183 10 3466527 10 3495740 10 3526361 10 3555590 10 3584938 10 3614628 10 3643977 10 3673157 10 3702850 10 3732726 10 3762071 10 3791103 10 3820632 10 3850419 10 3880069 10 3907757 10 3936991 10 3966096 10 3995789 10 4031016 10 4065025 10 4094278 10 4123570 10 4153087 10 4182533 10 4212431 10 4242207 10 4271773 10 4301340 10 4331137 10 4361052 10 4391052 10 4420567 10 4450418 10 4479913 10 4509654 10 4539354 10 4568790 10 4598401 10 4628182 10 4657103 10 4686824 10 4716035 10 4745549 10 4775366 10 4805219 10 4834150 10 4864287 10 4893647 10 4922948 10 4952904 10 4983234 10 5013001 10 5042510 10 5071792 10 5101035 10 5130716 10 5160017 10 5188860 10 5218643 10 5248274 10 5277849 10 5307410 10 5336877 10 5366302 10 5396236 10 5426002 10 5454655 10 5484437 10 5513580 10 5542991 10 5572723 10 5602494 10 5632443 10 5662249 10 5692059 10 5721690 10 5753461 10 5782780 10 5812542 10 5841968 10 5874087 10 5903676 10 5933092 10 5962640 10 5991885 10 6020940 10 6050355 10 6079624 10 6109154 10 6138542 10 6167804 10 6197520 10 6227057 10 6256353 10 6285863 10 6315191 10 6344343 10 6373889 10 6403310 10 6432869 10 6462460 10 6491833 10 6521185 10 6550732 10 6580049 10 6612038 10 6643739 10 6675380 10 6707251 10 6738842 10 6770509 10 6802370 10 6834387 10 6865874 10 6897956 10 6929786 10 6961333 10 6992741 10 7024548 10 7057923 10 7091430 10 7125336 10 7158946 10 7192568 10 7226795 10 7260865 10 7294585 10 7328280 10 7362084 10 7395998 10 7430030 10 7464083 10 7497743 10 7531176 10 7565152 10 7598978 10 7632702 10 7666297 10 7700083 10 7734119 10 7767824 10 7801720 10 7835497 10 7869126 10 7903335 10 7937334 10 7970977 10 8004790 10 8038485 10 8072513 10 8106028 10 8140124 10 8173823 10 8207798 10 8241676 10 8275095 10 8309017 10 8342766 10 8376471 10 8410172 10 8443968 10 8477907 10 8511742 10 8545825 10 8579505 10 8612699 10 8645620 10 8679333 10 8713253 10 8747025 10 8780662 10 8814781 10 8848412 10 8882492 10 8916906 10 8951132 10 8984849 10 9018825 10 9052575 10 9085988 10 9119217 10 9151397 10 9183293 10 9219120 10 9252731 10 9290201 10 9327134 10 9361846 10 9397166 10 9434935 10 9469477 10 9503236 10 9538161 10 9572926 10 9607081 10 9641184 10 9675314 10 9710658 10 9745160 10 9779243 10 9815622 10 9851411 10 9885947 10 9921597 10 9955965 10 9990181 10 10024061 10 10059286 10 10094815 10 10128864 10 10162957 10 10196237 10 10228712 10 10260667 10 10292813 10 10324381 10 10356303 10 10388398 10 10419985 10 10451865 10 10484133 10 10515455 10 10547550 10 10579387 10 10611252 10 10642822 10 10674433 10 10709147 10 10742550 10 10776118 10 10809873 10 10843440 10 10877399 10 10911133 10 10945019 10 10979029 10 11012492 10 11046016 10 11079665 10 11113330 10 11146786 10 11180649 10 11214097 10 11247887 10 11281338 10 11315122 10 11348730 10 11381509 10 11415272 10 11448810 10 11482450 10 11515935 10 11549304 10 11583235 10 11616387 10 11650007 10 11683893 10 11717252 10 11750896 10 11784908 10 11818239 10 11851441 10 11884930 10 11918482 10 11952041 10 11985968 10 12019387 10 12053362 10 12087314 10 12120964 10 12154790 10 12188313 10 12221955 10 12255281 10 12288770 10 12322425 10 12356418 10 12389956 10 12423134 10 12456550 10 12490142 10 12523863 10 12556974 10 12590729 10 12624085 10 12657668 10 12691088 10 12724809 10 12758414 10 12790152 10 12822304 10 12854053 10 12886063 10 12917776 10 12949921 10 12981593 10 13013656 10 13045306 10 13076937 10 13108923 10 13140695 10 13172263 10 13203712 10 13246076 10 13308807 10 13342704 10 13376696 10 13410040 10 13442160 10 13473905 10 13506052 10 13537654 10 13569522 10 13601123 10 13632885 10 13689934 10 13722117 10 13753676 10 13785107 10 13817243 10 13848825 10 13880069 10 13911855 10 13943556 10 13975339 10 14007068 10 14038899 10 14074314 10 14107960 10 14142121 10 14176132 10 14209350 10 14244646 10 14278463 10 14315122 10 14349087 10 14382762 10 14418155 10 14453169 10 14486577 10 14522124 10 14556614 10 14591083 10 14626336 10 14661006 10 14695532 10 14731211 10 14764586 10 14798865 10 14832395 10 14866495 10 14900326 10 14933294 10 14965382 10 14996541 10 15028507 10 15060036 10 15093580 10 15126981 10 15160071 10 15193784 10 15227302 10 15261014 10 15294593 10 15327836 10 15361272 10 15394822 10 15427955 10 15461255 10 15494483 10 15528419 10 15561950 10 15595788 10 15629205 10 15662620 10 15696308 10 15729364 10 15763165 10 15796672 10 15830527 10 15864312 10 15897257 10 15930363 10 15963720 10 15997234 10 16030237 10 16064270 10 16097525 10 16131222 10 16164665 10 16198372 10 16232125 10 16265434 10 16298757 10 16332200 10 16365752 10 16399223 10 16432994 10 16466272 10 16499867 10 16533028 10 16566290 10 16599239 10 16631970 10 16665197 10 16698799 10 16732331 10 16765637 10 16798782 10 16832178 10 16865989 10 16908199 10 16963730 10 16997059 10 17031508 10 17065826 10 17099738 10 17132824 10 17164737 10 17196394 10 17229920 10 17263627 10 17297287 10 17328481 10 17359863 10 17392780 10 17424467 10 17456103 10 17488657 10 17520766 10 17553074 10 17585019 10 17616223 10 17647422 10 17680014 10 17712233 10 17745329 10 17777675 10 17808869 10 17840385 10 17872848 10 17905271 10 17936837 10 17968936 10 18000737 10 18032574 10 18064597 10 18096036 10 18129868 10 18162088 10 18193722 10 18225613 10 18257037 10 18288916 10 18320267 10 18351174 10 18387721 10 18418637 10 18449895 10 18480757 10 18511646 10 18542452 10 18573219 10 18604369 10 18636439 10 18669549 10 18702463 10 18734519 10 18766720 10 18799423 10 18833090 10 18865096 10 18896210 10 18929104 10 18960971 10 18995184 10 19026837 10 19058376 10 19091829 10 19124191 10 19158553 10 19190883 10 19223727 10 19256700 10 19298076 10 19329179 10 19359690 10 19390825 10 19422968 10 19454346 10 19485153 10 19517857 10 19551896 10 19584596 10 19618088 10 19648246 10 19679511 10 19711403 10 19742931 10 19774722 10 19805627 10 19837430 10 19872498 10 19907399 10 19940841 10 19974483 10 20008153 10 20040962 10 20073637 10 20106819 10 20138784 10 20171360 10 20203882 10 20237181 10 20269684 10 20301300 10 20333774 10 20365919 10 20397684 10 20430262 10
%%writefile pds-rc,zamok2.py
import threading
import time
zdielana = 0
def race_condition_zamok(zamok, pocet):
global zdielana #chceme pouzivat globalnu premennu
for _ in range(pocet):
with zamok: #zamkne cely blok
zdielana += 1 #zdielana = zdielana+1
zam = threading.Lock() #vytvorenie zamku
vlakna = [threading.Thread(target=race_condition_zamok,
args=(zam, 1000000,))
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(zdielana, len(aktivne))
#Mohlo by sa stat, ze podrobny vypis bude obsahovat menej beziacich vlakien
time.sleep(0.1)
print(zdielana)
20463481 10 20495232 10 20527269 10 20559533 10 20593218 10 20625756 10 20659433 10 20691484 10 20723649 10 20756614 10 20788982 10 20820732 10 20853014 10 20885125 10 20916415 10 20948477 10 20980223 10 21012055 10 21044267 10 21077421 10 21108942 10 21139656 10 21170069 10 21201334 10 21232072 10 21263494 10 21293973 10 21324221 10 21354780 10 21384655 10 21414985 10 21445519 10 21475662 10 21505844 10 21537167 10 21567651 10 21598270 10 21631061 10 21661398 10 21691720 10 21722522 10 21752517 10 21783131 10 21814227 10 21844678 10 21874953 10 21905393 10 21935618 10 21966404 10 21996277 10 22026747 10 22057323 10 22087712 10 22118613 10 22149358 10 22179905 10 22210476 10 22240949 10 22271651 10 22302133 10 22332975 10 22365096 10 22396569 10 22427276 10 22458741 10 22489423 10 22521507 10 22553724 10 22584139 10 22614615 10 22646234 10 22678350 10 22708926 10 22741186 10 22772175 10 22803832 10 22835553 10 22867510 10 22900290 10 22932129 10 22962838 10 22993389 10 23025049 10 23056644 10 23088630 10 23119597 10 23151988 10 23183181 10 23213522 10 23245063 10 23276350 10 23307482 10 23337667 10 23369264 10 23400681 10 23432714 10 23464151 10 23494572 10 23526462 10 23556795 10 23588029 10 23618845 10 23651180 10 23682610 10 23713789 10Writing pds-rc,zamok2.py 23744387 10 23774608 10 23806065 10 23838288 10 23868739 10 23899813 10 23930807 10 23963185 10 23993014 10 24024730 10 24058157 10 24091072 10 24121950 10 24152315 10 24184647 10 24215036 10 24245013 10 24274850 10 24306866 10 24337308 10 24367576 10 24398178 10 24429987 10 24462663 10 24494091 10 24525736 10 24559892 10 24591483 10 24623112 10 24654822 10 24686827 10 24718874 10 24750747 10 24782141 10 24814217 10 24845183 10 24877436 10 24908814 10 24940774 10 24972744 10 25004594 10 25036403 10 25068265 10 25099522 10 25134831 10 25168138 10 25198412 10 25228817 10 25258950 10 25289476 10 25319707 10 25349971 10 25380880 10 25411454 10 25449628 10 25480761 10 25540468 10 25571554 10 25601421 10 25631827 10 25662161 10 25692382 10 25722508 10 25758345 10 25789410 10 25819746 10 25849988 10 25879684 10 25910047 10 25940232 10 25970455 10 26000821 10 26031060 10 26061281 10 26091705 10 26122189 10 26151699 10 26181836 10 26212108 10 26242272 10 26272857 10 26345000 10 26379228 10 26409951 10 26440846 10 26471007 10 26502812 10 26534370 10 26565109 10 26595590 10 26625832 10 26656529 10 26687102 10 26717087 10 26747294 10 26778500 10 26809355 10 26840737 10 26871799 10 26902065 10 26934088 10 26974822 10 27012649 10 27048372 10 27080014 10 27114290 10 27153912 10 27187360 10 27217591 10 27248228 10 27322813 10 27352899 10 27382555 10 27413301 10 27443734 10 27475231 10 27506687 10 27538421 10 27574811 10 27612361 10 27650814 10 27684254 10 27715832 10 27747422 10 27779879 10 27818600 10 27858221 10 27890978 10 27929241 10 27961886 10 27997036 10 28029341 10 28059681 10 28091050 10 28123410 10 28160619 10 28197044 10 28231141 10 28263189 10 28294107 10 28335277 10 28377046 10 28410713 10 28440676 10 28471870 10 28502167 10 28533926 10 28566235 10 28598989 10 28639420 10 28672777 10 28704696 10 28735760 10 28770589 10 28802389 10 28832600 10 28863589 10 28895117 10 28926401 10 28956937 10 28989292 10 29022730 10 29057006 10 29087733 10 29120043 10 29153880 10 29187157 10 29217711 10 29248980 10 29282560 10 29313680 10 29352035 10 29385082 10 29420180 10 29451105 10 29481697 10 29512728 10 29543347 10 29574854 10 29604780 10 29634651 10 29665005 10 29694871 10 29724768 10 29754488 10 29783907 10 29813450 10 29842639 10 29873345 10 29903640 10 29933356 10 29963226 10 29993103 10 30022888 10 30052616 10 30082416 10 30112577 10 30142066 10 30171484 10 30201421 10 30230795 10 30260935 10 30290321 10 30319801 10 30349725 10 30380380 10 30411010 10 30442019 10 30471307 10 30501225 10 30531361 10 30561294 10 30590895 10 30620961 10 30650898 10 30680892 10 30710894 10 30740422 10 30770149 10 30800588 10 30832007 10 30863142 10 30893228 10 30924941 10 30955458 10 30985647 10 31016720 10 31046897 10 31076614 10 31106661 10 31136768 10 31166651 10 31196742 10 31226583 10 31256731 10 31286433 10 31316357 10 31346347 10 31376846 10 31407525 10 31438522 10 31470529 10 31501691 10 31531766 10 31561580 10 31591160 10 31620839 10 31651631 10 31682390 10 31713081 10 31743518 10 31776262 10 31808329 10 31840341 10 31872503 10 31904420 10 31937118 10 31968941 10 32000941 10 32033002 10 32066041 10 32098649 10 32130734 10 32163421 10 32195860 10 32228167 10 32260316 10 32292498 10 32324825 10 32355797 10
%%time
!C:\Python35\python.exe pds-rc,zamok2.py
32387234 10 32418954 10 32450227 10 32481271 10 32512312 10 32543413 10 32574966 10 32607065 10 32640059 10 32671123 10 32701777 10 32733331 10 32765291 10 32795153 10 32828142 10 32858392 10 32891081 10 32925077 10 32955062 10 32985139 10 33015480 10 33048488 10 33079480 10 33110026 10 33139848 10 33169999 10 33200340 10 33231573 10 33260651 10 33292365 10 33322857 10 33353040 10 33383192 10 33414333 10 33445342 10 33474958 10 33504701 10 33536054 10 33566740 10 33600505 10 33631175 10 33660992 10 33690835 10 33724543 10 33757448 10 33789099 10 33820884 10 33852643 10 33883965 10 33916257 10 33948649 10 33980127 10 34013267 10 34044026 10 34075442 10 34106813 10 34138364 10 34169560 10 34199707 10 34230160 10 34260072 10 34290660 10 34320871 10 34353785 10 34383838 10 34413815 10 34443523 10 34473270 10 34504632 10 34534817 10 34564629 10 34594505 10 34624577 10 34658608 10 34692743 10 34725332 10 34755016 10 34786829 10 34816017 10 34846460 10 34876309 10 34906293 10 34936117 10 34965650 10 34995822 10 35025789 10 35057326 10 35087053 10 35116757 10 35146902 10 35176866 10 35210992 10 35243433 10 35273546 10 35303408 10 35333572 10 35364482 10 35393886 10 35425331 10 35456195 10 35487286 10 35518405 10 35549425 10 35580615 10 35611403 10 35642593 10 35674338 10 35705059 10 35736084 10 35767237 10 35798690 10 35830050 10 35861393 10 35893018 10 35922929 10 35952361 10 35982164 10 36012322 10 36042257 10 36071724 10 36101742 10 36131376 10 36161371 10 36191481 10 36221123 10 36255418 10 36303824 10 36333678 10 36364684 10 36395347 10 36425493 10 36455735 10 36485343 10 36518105 10 36549567 10 36581294 10 36612244 10 36704804 10 36734882 10 36765789 10 36796695 10 36827489 10 36858317 10 36889109 10 36921383 10 36956591 10 36993949 10 37028313 10 37062068 10 37095545 10 37127433 10 37158178 10 37201606 10 37230928 10 37260486 10 37290599 10 37320340 10 37349693 10 37379861 10 37410974 10 37441759 10 37472560 10 37502689 10 37532945 10 37563420 10 37594709 10 37625271 10 37655152 10 37686797 10 37715866 10 37744969 10 37775140 10 37806135 10 37840372 10 37871027 10 37900777 10 37932537 10 37966107 10 37996072 10 38025499 10 38055610 10 38086335 10 38116864 10 38148389 10 38182529 10 38213417 10 38244486 10 38275182 10 38305696 10 38336632 10 38367616 10 38398197 10 38429133 10 38460106 10 38490864 10 38521489 10 38552569 10 38582397 10 38613390 10 38644098 10 38674855 10 38705661 10 38736114 10 38766881 10 38797618 10 38833897 10 38864316 10 38895393 10 38927407 10 38958959 10 38989783 10 39020700 10 39051997 10 39082758 10 39113720 10 39143934 10 39174596 10 39205173 10 39239476 10 39270700 10 39301395 10 39332226 10 39362944 10 39394072 10 39424474 10 39455111 10 39485722 10 39516694 10 39547218 10 39577346 10 39607979 10 39638272 10 39668619 10 39698593 10 39728924 10 39759225 10 39790173 10 39820837 10 39851163 10 39882007 10 39912351 10 39942742 10 39973443 10 40005058 10 40036064 10 40066071 10 40096268 10 40126290 10 40156485 10 40186059 10 40216024 10 40246003 10 40275432 10 40304654 10 40334121 10 40363521 10 40392743 10 40422304 10 40464843 10 40495315 10 40526012 10 40555665 10 40585929 10 40624041 10 40656264 10 40685191 10 40720513 10 40756603 10 40785702 10 40814503 10 40843860 10 40873494 10 40902624 10 40937043 10 40972618 10 41002819 10 41031909 10 41061683 10 41091058 10 41121110 10 41150545 10 41180955 10 41210498 10 41240449 10 41270819 10 41301499 10 41332532 10 41362861 10 41393707 10 41424158 10 41454980 10 41486057 10 41516209 10 41544949 10 41581508 10 41617084 10 41647111 10 41676393 10 41705381 10 41734995 10 41764315 10 41794755 10 41824045 10 41853850 10 41883439 10 41913019 10 41943134 10 41974331 10 42002410 10 42034353 10 42064916 10 42094131 10 42124950 10 42157383 10 42187942 10 42219108 10 42249178 10 42280803 10 42310783 10 42340068 10 42369579 10 42400668 10 42430894 10 42462064 10 42490898 10 42520169 10 42551708 10 42582833 10 42612033 10 42641707 10 42673232 10 42704498 10 42734352 10 42763953 10 42793701 10 42824033 10 42854700 10 42885133 10 42915665 10 42946265 10 42976643 10 43007058 10 43037363 10 43067656 10 43097976 10 43128267 10 43158258 10 43188941 10 43220319 10 43251747 10 43283456 10 43313612 10 43344426 10 43377182 10 43409447 10 43441119 10 43472319 10 43502835 10 43533327 10 43564466 10 43596088 10 43627436 10 43658538 10 43689506 10 43719565 10 43749999 10 43780535 10 43813091 10 43845344 10 43876169 10 43906435 10 43937898 10 43969452 10 44000473 10 44031444 10 44062699 10 44092293 10 44121541 10 44151215 10 44180835 10 44209954 10 44239178 10 44268639 10 44298354 10 44327470 10 44356819 10 44386226 10 44415469 10 44445193 10 44474772 10 44504477 10 44533826 10 44563045 10 44592139 10 44621712 10 44651023 10 44680476 10 44709731 10 44739150 10 44769110 10 44798974 10 44828660 10 44858098 10 44887852 10 44918072 10 44947862 10 44977893 10 45007445 10 45037137 10 45066990 10 45096830 10 45126348 10 45156012 10 45186096 10 45216385 10 45245778 10 45275747 10 45305884 10 45335538 10 45365365 10 45394970 10 45425278 10 45457346 10 45488646 10 45519165 10 45550309 10 45581107 10 45612054 10 45643196 10 45673684 10 45704428 10 45734959 10 45765421 10 45796410 10 45827910 10 45858744 10 45890209 10 45921043 10 45952161 10 45983036 10 46013120 10 46042066 10 46071692 10 46101636 10 46133085 10 46162637 10 46193248 10 46223007 10 46253544 10 46282812 10 46312432 10 46341299 10 46372424 10 46401563 10 46430472 10 46466326 10 46495403 10 46524420 10 46553878 10 46583306 10 46612211 10 46643334 10 46673642 10 46705124 10 46735561 10 46766518 10 46796094 10 46825948 10 46855729 10 46884924 10 46916023 10 46948394 10 46977990 10 47007234 10 47037765 10 47067866 10 47099269 10 47130313 10 47161324 10 47191525 10 47222614 10 47253206 10 47284465 10 47315428 10 47346636 10 47377491 10 47408982 10 47439395 10 47470638 10 47500741 10 47531658 10 47562413 10 47593462 10 47624064 10 47655642 10 47686958 10 47718082 10 47749732 10 47780774 10 47811850 10 47842535 10 47872137 10 47901566 10 47931246 10 47963197 10 47992831 10 48022395 10 48051513 10 48080665 10 48110109 10 48139338 10 48168687 10 48198341 10 48229055 10 48258181 10 48287352 10 48316914 10 48346235 10 48375461 10 48404673 10 48433946 10 48462936 10 48492319 10 48521730 10 48550880 10 48580425 10 48609665 10 48638878 10 48668366 10 48697499 10 48726814 10 48755958 10 48785090 10 48814290 10 48843441 10 48872868 10 48902066 10 48931359 10 48960533 10 48989935 10 49019130 10 49048699 10 49077936 10 49107343 10 49136319 10 49165524 10 49195088 10 49225128 10 49255516 10 49285880 10 49316050 10 49346372 10 49377026 10 49407296 10 49437538 10 49467506 10 49497890 10 49529048 10 49559052 10 49589221 10 49619769 10 49649964 10 49680250 10 49710920 10 49741176 10 49771461 10 49801712 10 49832333 10 49862764 10 49893399 10 49923783 10 49954446 10 49984916 10 50015285 10 50045545 10 50076177 10 50106530 10 50136868 10 50167421 10 50198072 10 50228579 10 50258990 10 50289413 10 50319925 10 50349829 10 50378911 10 50409486 10 50439469 10 50469111 10 50498726 10 50527989 10 50557955 10 50586945 10 50615891 10 50645173 10 50675008 10 50705653 10 50734687 10 50763928 10 50792715 10 50821963 10 50852265 10 50885562 10 50915822 10 50945394 10 50973865 10 51003789 10 51033748 10 51062590 10 51091465 10 51120578 10 51149547 10 51178965 10 51208158 10 51237056 10 51266385 10 51297056 10 51327172 10 51357071 10 51387263 10 51417784 10 51448182 10 51478016 10 51506957 10 51536153 10 51565261 10 51594603 10 51623807 10 51652802 10 51682229 10 51711328 10 51740586 10 51769599 10 51798703 10 51827668 10 51856979 10 51885938 10 51915394 10 51944584 10 51974890 10 52004631 10 52035143 10 52065318 10 52095151 10 52124289 10 52153345 10 52182870 10 52211961 10 52241295 10 52270562 10 52298625 10 52326658 10 52354793 10 52383129 10 52412072 10 52440104 10 52468783 10 52496942 10 52525490 10 52554098 10 52582789 10 52611701 10 52641150 10 52670245 10 52699358 10 52728425 10 52757964 10 52787258 10 52821051 10 52851676 10 52882168 10 52912463 10 52943238 10 52973529 10 53003880 10 53034330 10 53065530 10 53109324 10 53139991 10 53168768 10 53198831 10 53228142 10 53258179 10 53287310 10 53316623 10 53346109 10 53379409 10 53412791 10 53441835 10 53472049 10 53500925 10 53530653 10 53560830 10 53589832 10 53619558 10 53649924 10 53678886 10 53708199 10 53738983 10 53767830 10 53797193 10 53827658 10 53856400 10 53886056 10 53916413 10 53946198 10 53974881 10 54005116 10 54035735 10 54065195 10 54094256 10 54124671 10 54155099 10 54184214 10 54213445 10 54243763 10 54273657 10 54302684 10 54332140 10 54362632 10 54392877 10 54421612 10 54451717 10 54481890 10 54512536 10 54542864 10 54573267 10 54603444 10 54632561 10 54661554 10 54690850 10 54720766 10 54750503 10 54780635 10 54809903 10 54839121 10 54869571 10 54899090 10 54927703 10 54957760 10 54989385 10 55018625 10 55047744 10 55076709 10 55106690 10 55136146 10 55165067 10 55195033 10 55224559 10 55255082 10 55284026 10 55313017 10 55342278 10 55371189 10 55401742 10 55432145 10 55462358 10 55493565 10 55525187 10 55555431 10 55585474 10 55615850 10 55645366 10 55674550 10 55703863 10 55733239 10 55762577 10 55791733 10 55820884 10 55849391 10 55878294 10 55907355 10 55936422 10 55965750 10 55994733 10 56024285 10 56053351 10 56082949 10 56111849 10 56141113 10 56170101 10 56199580 10 56229137 10 56258368 10 56287612 10 56316832 10 56345786 10 56375051 10 56404022 10 56433310 10 56462387 10 56491254 10 56520565 10 56549772 10 56578584 10 56607674 10 56637128 10 56665957 10 56695347 10 56724341 10 56753821 10 56783233 10 56812110 10 56841437 10 56870611 10 56899993 10 56929429 10 56959390 10 56988634 10 57018234 10 57047383 10 57076643 10 57106025 10 57134967 10 57164250 10 57193820 10 57222962 10 57252538 10 57281564 10 57310938 10 57340017 10 57369129 10 57398057 10 57427126 10 57455921 10 57485052 10 57514339 10 57543285 10 57572157 10 57601522 10 57630598 10 57659662 10 57688840 10 57717744 10 57746814 10 57775747 10 57804331 10 57833274 10 57862278 10 57891142 10 57920322 10 57949276 10 57977850 10 58006402 10 58035614 10 58064511 10 58093508 10 58122430 10 58152015 10 58181910 10 58210586 10 58239736 10 58268473 10 58297748 10 58326673 10 58356567 10 58385767 10 58414990 10 58443861 10 58472723 10 58501945 10 58530773 10 58559896 10 58588764 10 58617538 10 58646810 10 58675562 10 58704798 10 58733902 10 58763311 10 58792687 10 58823491 10 58852614 10 58881758 10 58913201 10 58942064 10 58972409 10 59001003 10 59030908 10 59061409 10 59090311 10 59120232 10 59150020 10 59179740 10 59210860 10 59239471 10 59268911 10 59299566 10 59328309 10 59357448 10 59387476 10 59418010 10 59447923 10 59480190 10 59510545 10 59539355 10 59571386 10 59601762 10 59632892 10 59661424 10 59690776 10 59720554 10 59749633 10 59779300 10 59808414 10 59837887 10 59867288 10 59896282 10 59926625 10 59956530 10 59986636 10 60016535 10 60046790 10 60076558 10 60106588 10 60136623 10 60166805 10 60196580 10 60226846 10 60256937 10 60286966 10 60317044 10 60346749 10 60376985 10 60407313 10 60436763 10 60466943 10 60497050 10 60526926 10 60557340 10 60587309 10 60617333 10 60647865 10 60678133 10 60707686 10 60737435 10 60767073 10 60797351 10 60827288 10 60857466 10 60887793 10 60917874 10 60947093 10 60977161 10 61007065 10 61037299 10 61067658 10 61097598 10 61127456 10 61157620 10 61187499 10 61217135 10 61247389 10 61277412 10 61307730 10 61337796 10 61367809 10 61398011 10 61428409 10 61458227 10 61488180 10 61518370 10 61548641 10 61579469 10 61609496 10 61639558 10 61669244 10 61699476 10 61729953 10 61758806 10 61787619 10 61816719 10 61845782 10 61874755 10 61903616 10 61932762 10 61962319 10 61992462 10 62022975 10 62053484 10 62083660 10 62114809 10 62146558 10 62176842 10 62206420 10 62235757 10 62265605 10 62295753 10 62326001 10 62355469 10 62384563 10 62414110 10 62443433 10 62472859 10 62501761 10 62531095 10 62560316 10 62589357 10 62618893 10 62649058 10 62678062 10 62707264 10 62736670 10 62765897 10 62795583 10 62824249 10 62852774 10 62881723 10 62910787 10 62939978 10 62969159 10 62997933 10 63027006 10 63056110 10 63085135 10 63115905 10 63144532 10 63174033 10 63204329 10 63234971 10 63264715 10 63293725 10 63322693 10 63353959 10 63385757 10 63414933 10 63443652 10 63473292 10 63503068 10 63533183 10 63565981 10 63598394 10 63628317 10 63658658 10 63688919 10 63718654 10 63749030 10 63779517 10 63809863 10 63840385 10 63871059 10 63901129 10 63930310 10 63960592 10 63989886 10 64019442 10 64048973 10 64077578 10 64106331 10 64134813 10 64162819 10 64192856 10 64223661 10 64254230 10 64283943 10 64366399 10 64396451 10 64427063 10 64458036 10 64491653 10 64522117 10 64553042 10 64588877 10 64620408 10 64651875 10 64682073 10 64713153 10 64756874 10 64786990 10 64818239 10 64848440 10 64878870 10 64910246 10 64940297 10 64970720 10 65001114 10 65030652 10 65063483 10 65103618 10 65141648 10 65178054 10 65213731 10 65244703 10 65275722 10 65306722 10 65337116 10 65367943 10 65401336 10 65431826 10 65462041 10 65494321 10 65524417 10 65555289 10 65585607 10 65616343 10 65646772 10 65675826 10 65706384 10 65744785 10 65781031 10 65817590 10 65852589 10 65882772 10 65912428 10 65941790 10 65970834 10 65999523 10 66028807 10 66057952 10 66086919 10 66115489 10 66144241 10 66175026 10 66204496 10 66234171 10 66263159 10 66292289 10 66321477 10 66350627 10 66379344 10 66410540 10 66439748 10 66468725 10 66497561 10 66526552 10 66556808 10 66585837 10 66620186 10 66656763 10 66693061 10 66729961 10 66760891 10 66790555 10 66820855 10 66850886 10 66881129 10 66911659 10 66941620 10 66970777 10 67000188 10 67029258 10 67058251 10 67087095 10 67117453 10 67146547 10 67175643 10 67204487 10 67233239 10 67262821 10 67293440 10 67322438 10 67354633 10 67384318 10 67413532 10 67442222 10 67471445 10 67500586 10 67529520 10 67559484 10 67591348 10 67622023 10 67652858 10 67684137 10 67715333 10 67746067 10 67776774 10 67812717 10 67843687 10 67873603 10 67904726 10 67936435 10 67966301 10 67997837 10 68028111 10 68059418 10 68090092 10 68123490 10 68155844 10 68194660 10 68225523 10 68255167 10 68287137 10 68317886 10 68349619 10 68379503 10 68408467 10 68436849 10 68467157 10 68496281 10 68525287 10 68554948 10 68583918 10 68615207 10 68645799 10 68674554 10 68705806 10 68735144 10 68764205 10 68793356 10 68822217 10 68852255 10 68882594 10 68911319 10 68939622 10 68968683 10 68997900 10 69027778 10 69056654 10 69085753 10 69116164 10 69144939 10 69174616 10 69203807 10 69234455 10 69264248 10 69293460 10 69323883 10 69353840 10 69383885 10 69414337 10 69444499 10 69474945 10 69505293 10 69534927 10 69565313 10 69595405 10 69625466 10 69655714 10 69685808 10 69715925 10 69746244 10 69776680 10 69806677 10 69837531 10 69867803 10 69897988 10 69929568 10 69960430 10 69991007 10 70023921 10 70053946 10 70083751 10 70113698 10 70144212 10 70174264 10 70205578 10 70234955 10 70265608 10 70295731 10 70326084 10 70356267 10 70387584 10 70418107 10 70447529 10 70477592 10 70508687 10 70538716 10 70569879 10 70599965 10 70630300 10 70734188 10 70764755 10 70795322 10 70826003 10 70856460 10 70887558 10 70918095 10 70949870 10 70979718 10 71010213 10 71039583 10 71068043 10 71098312 10 71126576 10 71156532 10 71185351 10 71214237 10 71243596 10 71272332 10 71302251 10 71330698 10 71359879 10 71389186 10 71418386 10 71447670 10 71476588 10 71506002 10 71535392 10 71564533 10 71593592 10 71622592 10 71651932 10 71680859 10 71710032 10 71738735 10 71767820 10 71796764 10 71825985 10 71854869 10 71883763 10 71913336 10 71942294 10 71972461 10 72002433 10 72031563 10 72060749 10 72091625 10 72122309 10 72153074 10 72181780 10 72212414 10 72242858 10 72272370 10 72302063 10 72330829 10 72364933 10 72398671 10 72429941 10 72460410 10 72490922 10 72524424 10 72554563 10 72586718 10 72618339 10 72650697 10 72697655 10 72730010 10 72759565 10 72789154 10 72819660 10 72848845 10 72879803 10 72909121 10 72937827 10 72967523 10 72999312 10 73029375 10 73061231 10 73091231 10 73121650 10 73152434 10 73182583 10 73212648 10 73242614 10 73272999 10 73302720 10 73332671 10 73362587 10 73393296 10 73423180 10 73453177 10 73483426 10 73513799 10 73544636 10 73574868 10 73605608 10 73635102 10 73665057 10 73695876 10 73725689 10 73755952 10 73785805 10 73815870 10 73846790 10 73876982 10 73906937 10 73938098 10 73969250 10 73999789 10 74030294 10 74060069 10 74090439 10 74121126 10 74151664 10 74183238 10 74213349 10 74243601 10 74274046 10 74304530 10 74334582 10 74364990 10 74395217 10 74425661 10 74456048 10 74486018 10 74517195 10 74547397 10 74577912 10 74608240 10 74638777 10 74669459 10 74699369 10 74728898 10 74758386 10 74788184 10 74818045 10 74847263 10 74876280 10 74905335 10 74934843 10 74964222 10 74994027 10 75023985 10 75053037 10 75082818 10 75112780 10 75142574 10 75172273 10 75201906 10 75231279 10 75259685 10 75289740 10 75319577 10 75348776 10 75378321 10 75408822 10 75439286 10 75468820 10 75497810 10 75527702 10 75556919 10 75585917 10 75614848 10 75643712 10 75672584 10 75702186 10 75731189 10 75760455 10 75789529 10 75819065 10 75848542 10 75878068 10 75907774 10 75936968 10 75966376 10 75994914 10 76023851 10 76053616 10 76083937 10 76114216 10 76144068 10 76174085 10 76204002 10 76233979 10 76264292 10 76294451 10 76324408 10 76352820 10 76381385 10 76410456 10 76439995 10 76468846 10 76497455 10 76526332 10 76556149 10 76585047 10 76614945 10 76643732 10 76672768 10 76701529 10 76733667 10 76763276 10 76791858 10 76821222 10 76849184 10 76877680 10 76905844 10 76934816 10 76964226 10 76992555 10 77021660 10 77051640 10 77082447 10 77110649 10 77140084 10 77168471 10 77196460 10 77227748 10 77258565 10 77287467 10 77316781 10 77345264 10 77374798 10 77403958 10 77433106 10 77462210 10 77493095 10 77521932 10 77550492 10 77580971 10 77610056 10 77639277 10 77667774 10 77696529 10 77728846 10 77758657 10 77787803 10 77818162 10 77847894 10 77876379 10 77906773 10 77936995 10 77967428 10 77997420 10 78027217 10 78057379 10 78087812 10 78117957 10 78148371 10 78178387 10 78208453 10 78238835 10 78268959 10 78298951 10 78329261 10 78359400 10 78388921 10 78418477 10 78448881 10 78478773 10 78509244 10 78539292 10 78569186 10 78599141 10 78628172 10 78657682 10 78686244 10 78715450 10 78744389 10 78773094 10 78802236 10 78831192 10 78860074 10 78889185 10 78918133 10 78947032 10 78976227 10 79004902 10 79033904 10 79063026 10 79092150 10 79121105 10 79150065 10 79179777 10 79208365 10 79238104 10 79266819 10 79295743 10 79324682 10 79354071 10 79383058 10 79411821 10 79440931 10 79470935 10 79499733 10 79528776 10 79559426 10 79589030 10 79619326 10 79648761 10 79678410 10 79708098 10 79737739 10 79766782 10 79800216 10 79835026 10 79864638 10 79894976 10 79924607 10 79954743 10 79984366 10 80012873 10 80041715 10 80070348 10 80099201 10 80128086 10 80156798 10 80185608 10 80215992 10 80245757 10 80275960 10 80305827 10 80335968 10 80366014 10 80396188 10 80426953 10 80457150 10 80487537 10 80517928 10 80547653 10 80578121 10 80623175 10 80653518 10 80682271 10 80712188 10 80742412 10 80771430 10 80801648 10 80833672 10 80862747 10 80892530 10 80922549 10 80951075 10 80980390 10 81009149 10 81038304 10 81069274 10 81104608 10 81134140 10 81163730 10 81194042 10 81223317 10 81252152 10 81282125 10 81313330 10 81343352 10 81376013 10 81405529 10 81434235 10 81462807 10 81491675 10 81521312 10 81549799 10 81578618 10 81607787 10 81637889 10 81666221 10 81695136 10 81723554 10 81752657 10 81782813 10 81812956 10 81843084 10 81873602 10 81904768 10 81935432 10 81965434 10 81995250 10 82110306 10 82141031 10 82171388 10 82201413 10 82231851 10 82261747 10 82291479 10 82321794 10 82351369 10 82382376 10 82412453 10 82443384 10 82474253 10 82504174 10 82534665 10 82563328 10 82593232 10 82623365 10 82654489 10 82685264 10 82715278 10 82746112 10 82776099 10 82805838 10 82834479 10 82863541 10 82892934 10 82921646 10 82950826 10 82980230 10 83010286 10 83040003 10 83070472 10 83100554 10 83129580 10 83160784 10 83191390 10 83221168 10 83250154 10 83278477 10 83307794 10 83336910 10 83365457 10 83394534 10 83423468 10 83452535 10 83481610 10 83510756 10 83539720 10 83568889 10 83598131 10 83626785 10 83655743 10 83684842 10 83714034 10 83743222 10 83771988 10 83801091 10 83830213 10 83859426 10 83889654 10 83919842 10 83950025 10 83980129 10 84010577 10 84040886 10 84071109 10 84101464 10 84131627 10 84162066 10 84191882 10 84222123 10 84252067 10 84282643 10 84312127 10 84342586 10 84372682 10 84403060 10 84433127 10 84467925 10 84497359 10 84527098 10 84557466 10 84587880 10 84619588 10 84649829 10 84683439 10 84720563 10 84755192 10 84785533 10 84818438 10 84856048 10 84891334 10 84924714 10 84955017 10 84985305 10 85017393 10 85048053 10 85077148 10 85108373 10 85142520 10 85172144 10 85201983 10 85233313 10 85262707 10 85295728 10 85324497 10 85352688 10 85381722 10 85410483 10 85458130 10 85490589 10 85519884 10 85550088 10 85584795 10 85619248 10 85652904 10 85689907 10 85723488 10 85757581 10 85787280 10 85815993 10 85844881 10 85883300 10 85921675 10 85954135 10 85983422 10 86020144 10 86054927 10 86082975 10 86111286 10 86140792 10 86169708 10 86199206 10 86227741 10 86255995 10 86285980 10 86315125 10 86346595 10 86376982 10 86406907 10 86436393 10 86465283 10 86495086 10 86524522 10 86553277 10 86582003 10 86611178 10 86640703 10 86669624 10 86698642 10 86727190 10 86755910 10 86785389 10 86814153 10 86842663 10 86876074 10 86905514 10 86934310 10 86963524 10 86993019 10 87022626 10 87057225 10 87095065 10 87131898 10 87163519 10 87195562 10 87234066 10 87270400 10 87299386 10 87328684 10 87357910 10 87393171 10 87430358 10 87461493 10 87490074 10 87519531 10 87548898 10 87577564 10 87607536 10 87637148 10 87666096 10 87694924 10 87723804 10 87752940 10 87782042 10 87812355 10 87841762 10 87871128 10 87900354 10 87928766 10 87957382 10 87986449 10 88015367 10 88044583 10 88073714 10 88102672 10 88131556 10 88160725 10 88189900 10 88219063 10 88247962 10 88276852 10 88306003 10 88335127 10 88364245 10 88393192 10 88422263 10 88451296 10 88480584 10 88509816 10 88538999 10 88568717 10 88597686 10 88626623 10 88655905 10 88684905 10 88713869 10 88743254 10 88772227 10 88801102 10 88829966 10 88858981 10 88888094 10 88917150 10 88946237 10 88975521 10 89004420 10 89033764 10 89062993 10 89092016 10 89120977 10 89150274 10 89179599 10 89208377 10 89237465 10 89266312 10 89295749 10 89325489 10 89355584 10 89388920 10 89418471 10 89448641 10 89480173 10 89514921 10 89543936 10 89574848 10 89606120 10 89636414 10 89665607 10 89695416 10 89726587 10 89757631 10 89788361 10 89819539 10 89849318 10 89878774 10 89908505 10 89939234 10 89970620 10 89999577 10 90029063 10 90059964 10 90094825 10 90124343 10 90152959 10 90183933 10 90214319 10 90244207 10 90272321 10 90301780 10 90331026 10 90360022 10 90389065 10 90418629 10 90448365 10 90477472 10 90507556 10 90537029 10 90566352 10 90594932 10 90624055 10 90653316 10 90682114 10 90710945 10 90739757 10 90768883 10 90798325 10 90827579 10 90856497 10 90889567 10 90928022 10 90959626 10 90989151 10 91018242 10 91046790 10 91076246 10 91105690 10 91133982 10 91163158 10 91192092 10 91221528 10 91250310 10 91279717 10 91308576 10 91337784 10 91367812 10 91402901 10 91442059 10 91473785 10 91502488 10 91531698 10 91561380 10 91590718 10 91619828 10 91718058 10 91751642 10 91781657 10 91812091 10 91841671 10 91873813 10 91908173 10 91938934 10 91967810 10 91996719 10 92026169 10 92055292 10 92084380 10 92154436 10 92182889 10 92211927 10 92242109 10 92272374 10 92302009 10 92340555 10 92369791 10 92399153 10 92427983 10 92457165 10 92486049 10 92514990 10 92544148 10 92573248 10 92601678 10 92630414 10 92659250 10 92688520 10 92717495 10 92746026 10 92775197 10 92804414 10 92835077 10 92864910 10 92894501 10 92924644 10 92955210 10 93000896 10 93031043 10 93062346 10 93096281 10 93130192 10 93162854 10 93194893 10 93225401 10 93255387 10 93286933 10 93321172 10 93353974 10 93384281 10 93416103 10 93447872 10 93478752 10 93508889 10 93539005 10 93569022 10 93599018 10 93632937 10 93666329 10 93700554 10 93730590 10 93760703 10 93790809 10 93820574 10 93850940 10 93887343 10 93919487 10 93949818 10 93979781 10 94008843 10 94043711 10 94072767 10 94102472 10 94134817 10 94169711 10 94200556 10 94234837 10 94266804 10 94295558 10 94328639 10 94362908 10 94392125 10 94421867 10 94453006 10 94482363 10 94513194 10 94543052 10 94573681 10 94604968 10 94635568 10 94664864 10 94699562 10 94737559 10 94774328 10 94808604 10 94845131 10 94881867 10 94919334 10 94957926 10 94992567 10 95021108 10 95052915 10 95086622 10 95118716 10 95147972 10 95179228 10 95208810 10 95237596 10 95267296 10 95295815 10 95326740 10 95356693 10 95385859 10 95422302 10 95452887 10 95481542 10 95511155 10 95540528 10 95570521 10 95599961 10 95629345 10 95659765 10 95689807 10 95719773 10 95748984 10 95778696 10 95808228 10 95838173 10 95868081 10 95899906 10 95942997 10 95971613 10 96001519 10 96030424 10 96059956 10 96089019 10 96118239 10 96147540 10 96176713 10 96205759 10 96234790 10 96263868 10 96292763 10 96322000 10 96350913 10 96380045 10 96409237 10 96438148 10 96468820 10 96501855 10 96534243 10 96566224 10 96596969 10 96626359 10 96655571 10 96684254 10 96713414 10 96742279 10 96771241 10 96800132 10 96832009 10 96865707 10 96897453 10 96928495 10 96958493 10 96988850 10 97018854 10 97048726 10 97081731 10 97115978 10 97148178 10 97180136 10 97213725 10 97244084 10 97274390 10 97304742 10 97335073 10 97365013 10 97395490 9 97425541 9 97456031 9 97486185 9 97516457 9 97546569 9 97576453 9 97607460 9 97640099 9 97674296 9 97706615 9 97736994 9 97767274 9 97797351 9 97827519 9 97857545 9 97887616 9 97918069 9 97948244 9 97978432 9 98009007 9 98038964 9 98069251 9 98099557 9 98129976 9 98160087 8 98190054 8 98220559 8 98251105 8 98281353 8 98312085 7 98342986 7 98373132 7 98406040 7 98438169 7 98468885 7 98502981 7 98533809 7 98563794 7 98593850 7 98625378 7 98655615 7 98686120 7 98716599 7 98746963 7 98777234 7 98808176 6 98839003 6 98883859 6 98920568 6 98968720 6 99006707 6 99049476 6 99096900 6 99136883 6 99171268 6 99204794 6 99240485 6 99276412 6 99309795 6 99345855 5 99375470 5 99409269 5 99445327 5 99480074 5 99509678 5 99538734 5 99573491 5 99607978 5 99637046 5 99665764 5 99694439 4 99723817 4 99761681 4 99798962 4 99833258 4 99867128 3 100000000 0 100000000 147815 10 177461 10 204691 10 231522 10 260238 10 289779 10 316150 10 342945 10 385765 10 412264 10 437716 10 463696 10 492510 10 525101 10 552548 10 579576 10 607336 10 640157 10 669861 10 697489 10 724593 10 751355 10 779036 10 806244 10 833069 10 860367 10 887152 10 914068 10 940990 10 968194 10 995140 10 1022434 10 1049342 10 1076210 10 1103346 10 1130986 10 1157924 10 1184128 10 1211476 10 1238528 10 1265805 10 1293337 10 1320416 10 1347591 10 1374971 10 1402613 10 1430635 10 1458035 10 1485093 10 1512184 10 1540057 10 1567534 10 1594755 10 1622175 10 1649273 10 1676426 10 1703757 10 1730917 10 1758233 10 1785593 10 1819921 10 1853612 10 1886906 10 1917804 10 1948530 10 1979895 10 2009677 10 2036958 10 2064276 10 2091202 10 2116974 10 2142051 10 2167641 10 2193535 10 2218927 10 2290609 10 2316164 10 2341637 10 2366924 10 2391779 10 2417301 10 2442584 10 2467893 10 2493823 10 2518918 10 2568764 10 2595150 10 2620495 10 2646378 10 2672506 10 2698293 10 2725594 10 2751901 10 2777505 10 2803945 10 2834796 10 2862898 10 2892210 10 2919670 10 2946808 10 2975214 10 3005847 10 3038450 10 3070953 10 3100481 10 3131477 10 3158644 10 3185975 10 3215585 10 3245052 10 3274256 10 3303805 10 3334089 10 3361643 10 3389900 10 3424934 10 3453670 10 3479548 10 3506193 10 3538858 10 3565881 10 3593123 10 3619929 10 3646968 10 3675209 10 3702382 10 3730107 10 3758348 10 3785845 10 3812909 10 3840539 10 3868052 10 3895656 10 3922892 10 3950716 10 3981510 10 4008099 10 4035812 10 4062875 10 4091519 10 4118640 10 4145655 10 4172675 10 4200038 10 4227153 10 4253875 10 4281248 10 4314570 10 4341035 10 4368041 10 4394896 10 4421769 10 4449221 10 4480698 10 4512186 10 4540380 10 4568110 10 4594955 10 4627582 10 4662211 10 4744681 10 4772027 10 4798742 10 4825958 10 4852783 10 4880113 10 4907516 10 4936582 10 4968627 10 5002596 10 5029356 10 5056512 10 5083294 10 5110371 10 5137506 10 5164768 10 5190644 10 5223031 10 5255136 10 5281547 10 5308500 10 5340339 10 5372007 10 5398608 10 5423350 10 5457496 10 5494475 10 5519732 10 5545018 10 5570414 10 5594512 10 5617776 10 5639389 10 5661646 10 5684092 10 5706547 10 5728884 10 5751303 10 5774296 10 5798494 10 5822931 10 5846328 10 5868703 10 5890793 10 5913216 10 5935524 10 5958176 10 5981488 10 6005865 10 6029482 10 6053573 10 6077416 10 6099988 10 6122330 10 6145080 10 6167525 10 6189747 10 6212197 10 6234881 10 6257405 10 6279637 10 6302363 10 6326097 10 6348389 10 6370893 10 6393292 10 6415579 10 6438129 10 6460792 10 6484250 10 6507183 10 6529604 10 6552472 10 6575968 10 6598675 10 6621537 10 6644524 10 6667361 10 6690433 10 6715280 10 6739549 10 6763969 10 6788924 10 6812548 10 6836778 10 6861474 10 6885206 10 6909576 10 6934368 10 6959437 10 6985087 10 7008602 10 7032391 10 7056530 10 7079093 10 7101626 10 7124531 10 7147713 10 7170831 10 7194358 10 7217445 10 7239785 10 7262553 10 7285727 10 7308818 10 7331974 10 7354270 10 7376319 10 7399100 10 7421956 10 7444763 10 7467973 10 7490463 10 7513649 10 7537016 10 7558736 10 7581260 10 7604076 10 7626624 10 7649041 10 7671734 10 7694455 10 7717199 10 7739125 10 7761200 10 7783890 10 7806310 10 7828632 10 7854664 10 7879204 10 7901850 10 7924082 10 7946533 10 7968956 10 7991141 10 8013827 10 8036483 10 8058996 10 8081562 10 8103906 10 8126350 10 8148519 10 8170800 10 8192910 10 8215146 10 8237523 10 8259708 10 8282252 10 8304662 10 8327261 10 8349673 10 8372391 10 8394787 10 8417095 10 8439760 10 8462449 10 8484595 10 8506953 10 8530187 10 8552599 10 8575683 10 8598340 10 8620794 10 8642946 10 8665423 10 CPU times: total: 312 ms Wall time: 42.8 s 8687811 10 8710626 10 8733380 10 8755454 9 8777916 9 8800395 9 8822764 9 8845252 9 8867635 9 8890492 9 8912901 9 8935838 9 8958573 9 8980843 9 9003005 9 9025690 9 9048320 9 9070820 9 9093611 9 9116503 9 9139391 9 9163168 9 9186579 9 9214273 9 9238005 9 9260657 9 9283262 9 9305358 9 9327330 9 9349835 9 9372811 9 9395440 9 9417592 9 9439918 9 9462250 9 9484896 9 9507738 9 9530225 9 9552517 9 9574840 9 9597274 9 9620405 8 9642808 8 9665201 8 9687540 8 9709849 8 9731661 8 9754181 8 9777424 8 9800177 8 9823410 8 9846348 8 9869456 8 9892002 7 9914454 6 9938555 5 9961730 4 10000000 0 10000000
from random import randrange
def vlakno_generuj(pocet):
nazov = threading.current_thread().name
print(f'{nazov}: start')
for _ in range(pocet):
time.sleep(0.2*randrange(1, 7))
print(f'{nazov}:', randrange(1000, 10000))
print(f'{nazov}: koniec')
vlakno_generuj(5)
MainThread: start MainThread: 2151 MainThread: 9235 MainThread: 7213 MainThread: 4078 MainThread: 6601 MainThread: koniec
# bez semaforu
import threading
import time
from random import randrange
def vlakno_generuj(pocet):
nazov = threading.current_thread().name
print(f'{nazov}: start')
for _ in range(pocet):
time.sleep(0.2*randrange(1, 7))
print(f'{nazov}:', randrange(1000, 10000))
print(f'{nazov}: koniec')
vlakna = [threading.Thread(target=vlakno_generuj,
args=(randrange(3, 10),))
for i in range(10)]
for vlakno in vlakna:
vlakno.start()
for vlakno in vlakna:
vlakno.join()
Thread-66: start Thread-67: start Thread-68: start Thread-69: start Thread-70: start Thread-71: start Thread-72: start Thread-73: start Thread-74: start Thread-75: start Thread-68: 2452 Thread-73:Thread-71: 1837 6067 Thread-67: 1602 Thread-68: 6404 Thread-75: 5677 Thread-66: 4938 Thread-69:Thread-72: 3020 Thread-70: 9402 9294 Thread-74:Thread-71: 5400 Thread-73: 6125 5754 Thread-68: 2237 Thread-71: 4536 Thread-71: koniec Thread-75:Thread-73: 5424 2089 Thread-67: 3847 Thread-70:Thread-72:Thread-68: 5001 8606 5806 Thread-68: koniec Thread-74:Thread-73: 6243 1283 Thread-72: 3173 Thread-66: 2620 Thread-67:Thread-69: 1227 8414 Thread-73:Thread-75: 2064 3869 Thread-70: 4390 Thread-70: koniec Thread-75: 3426 Thread-72:Thread-74: 3688 3232 Thread-73: 7191 Thread-73: 2899 Thread-73: koniec Thread-74: 8679 Thread-67: 3480 Thread-72:Thread-75: 6272 Thread-75: koniec 9710 Thread-66: 9505 Thread-69: 6858 Thread-72: 7658 Thread-72: koniec Thread-66: 1500 Thread-66: koniec Thread-69: 2992 Thread-74: 2342 Thread-67: 1862 Thread-67:Thread-69: 3979 Thread-69: koniec 7126 Thread-74: 9898 Thread-74: 7931 Thread-74: koniec Thread-67: 2548 Thread-67: 2108 Thread-67: 6971 Thread-67: koniec
# so semaforom
import threading
import time
from random import randrange
def vlakno_generuj(semafor, pocet):
nazov = threading.current_thread().name
with semafor:
print(f'{nazov}: start')
for _ in range(pocet):
time.sleep(0.2*randrange(1, 7))
print(f'{nazov}:', randrange(1000, 10000))
print(f'{nazov}: koniec')
sem = threading.BoundedSemaphore(3)
vlakna = [threading.Thread(target=vlakno_generuj,
args=(sem, randrange(3, 10),))
for i in range(10)]
for vlakno in vlakna:
vlakno.start()
for vlakno in vlakna:
vlakno.join()
Thread-96: start Thread-97: start Thread-98: start Thread-98: 8579 Thread-96: 1104 Thread-96: 4278 Thread-97: 7022 Thread-97:Thread-98: 3638 8597 Thread-98: 5216 Thread-96: 2339 Thread-97: 8878 Thread-98: 6898 Thread-96: 4882 Thread-96: koniec Thread-99: start Thread-97: 6932 Thread-98: 4141 Thread-97: 1692 Thread-98: 7686 Thread-99: 1548 Thread-97:Thread-98: 2045 6758 Thread-99: 7459 Thread-97: 1544 Thread-98: 9092 Thread-98: koniec Thread-100: start Thread-97: 9477 Thread-97: koniec Thread-101: start Thread-99: 9086 Thread-99: koniec Thread-102: start Thread-101: 7132 Thread-102: 1710 Thread-101: 9560 Thread-100: 1338 Thread-101: 6586 Thread-102: 9303 Thread-100: 2135 Thread-102: 5027 Thread-102: 2412 Thread-100: 8255 Thread-100: 9478 Thread-101: 5173 Thread-100: 7611 Thread-102: 7198 Thread-102: 2238 Thread-101: 1952 Thread-100: 4531 Thread-102: 6118 Thread-101: 1628 Thread-101: koniec Thread-103: start Thread-102: 5115 Thread-102: koniec Thread-104: start Thread-100: 2264 Thread-100: 3343 Thread-103: 8950 Thread-104: 5499 Thread-104: 1177 Thread-100: 8040 Thread-100: koniec Thread-105: start Thread-104: 8561 Thread-105:Thread-103: 2125 1680 Thread-103: 2317 Thread-103: 4699 Thread-104: 4024 Thread-105: 1189 Thread-103:Thread-105: 9565 7365 Thread-103: koniec Thread-104: 4130 Thread-105: 4347 Thread-105: koniec Thread-104: 5865 Thread-104: 8026 Thread-104: 5630 Thread-104: koniec
import queue
def test(ads):
ads.put(5)
ads.put(8)
ads.put(2)
while not ads.empty():
print(ads.get())
test(queue.Queue()) # rad / queue
5 8 2
test(queue.LifoQueue()) # zasobnik / stack
2 8 5
test(queue.PriorityQueue()) # prioritny rad / priority queue
2 5 8
# je mozne nastavit maxsize
rad = queue.Queue(maxsize=2)
rad.put(6)
rad.put(8)
rad.full()
True
rad.put(5) #caka a vlozi, ak sa bude dat
Producent
Vytvorí zoznam čísel a postupne vkladá do radu, ak je to možné (teda nie je plný)
Konzument
Postupne (po náhodnom čase) vyberie/spracuje jeden prvok z radu
Vytvorte nasledovné funkcie a vypisujte priebežne čo vykonávajú:
def producent(rad, pocet):
#vytvori zoznam danej velkosti
#postupne v nahodnych casoch vyberie zo zoznamu
# a prida do spolocneho radu
# pricom kontroluje ci nie je plny rad
def konzument(rad, pocet):
#postupne v nahodnych casoch vyberie z radu
# pricom kontroluje ci nieco v rade je
n = 10
q = queue.Queue(maxsize=3)
vlakna = [threading.Thread(target=fcia,
args=(q, n))
for fcia in [konzument, producent]]
for vlakno in vlakna:
vlakno.start()
for vlakno in vlakna:
vlakno.join()
-spustiť viacero konzumentov aj viacero producentov (napr. 3 a 4) a použiť prioritný rad