Package: pypipr
AboutThe Python Package Index Project (pypipr)pypi :https://pypi.org/project/pypiprSetupInstall with pippip install pypiprThen import pypiprimportpypiprCONSTANTLINUXWINDOWSFUNCTIONauto_reloadauto_reload(filename)avgavg(i)Simple Average Function karena tidak disediakan oleh pythonn=[1,22,2,3,13,2,123,12,31,2,2,12,2,1]print(avg(n))Output:16.285714285714285basenamebasename(path)Mengembalikan nama file dari pathprint(basename("/ini/nama/folder/ke/file.py"))Output:file.pybatch_calculatebatch_calculate(pattern)Analisa perhitungan massal.Bisa digunakan untuk mencari alternatif terendah/tertinggi/dsb.iprint(batch_calculate("{1 10} m ** {1 3}"))Output:[('1 m ** 1',<Quantity(1,'meter')>),('1 m ** 2',<Quantity(1,'meter ** 2')>),('1 m ** 3',<Quantity(1,'meter ** 3')>),('2 m ** 1',<Quantity(2,'meter')>),('2 m ** 2',<Quantity(2,'meter ** 2')>),('2 m ** 3',<Quantity(2,'meter ** 3')>),('3 m ** 1',<Quantity(3,'meter')>),('3 m ** 2',<Quantity(3,'meter ** 2')>),('3 m ** 3',<Quantity(3,'meter ** 3')>),('4 m ** 1',<Quantity(4,'meter')>),('4 m ** 2',<Quantity(4,'meter ** 2')>),('4 m ** 3',<Quantity(4,'meter ** 3')>),('5 m ** 1',<Quantity(5,'meter')>),('5 m ** 2',<Quantity(5,'meter ** 2')>),('5 m ** 3',<Quantity(5,'meter ** 3')>),('6 m ** 1',<Quantity(6,'meter')>),('6 m ** 2',<Quantity(6,'meter ** 2')>),('6 m ** 3',<Quantity(6,'meter ** 3')>),('7 m ** 1',<Quantity(7,'meter')>),('7 m ** 2',<Quantity(7,'meter ** 2')>),('7 m ** 3',<Quantity(7,'meter ** 3')>),('8 m ** 1',<Quantity(8,'meter')>),('8 m ** 2',<Quantity(8,'meter ** 2')>),('8 m ** 3',<Quantity(8,'meter ** 3')>),('9 m ** 1',<Quantity(9,'meter')>),('9 m ** 2',<Quantity(9,'meter ** 2')>),('9 m ** 3',<Quantity(9,'meter ** 3')>),('10 m ** 1',<Quantity(10,'meter')>),('10 m ** 2',<Quantity(10,'meter ** 2')>),('10 m ** 3',<Quantity(10,'meter ** 3')>)]batchmakerbatchmaker(pattern: str)Alat Bantu untuk membuat teks yang berulang.Gunakan{[start][separator][finish]([separator][step])}.[start] dan [finish]    -> bisa berupa huruf maupun angka  
([separator][step])     -> bersifat optional  
[separator]             -> selain huruf dan angka  
[step]                  -> berupa angka positifs="Urutan {1/6/3} dan{10:9}dan {j k} dan {Z - A - 15} saja."print(batchmaker(s))print(list(batchmaker(s)))Output:<generatorobjectbatchmakerat0x7085838ee0>['Urutan 1 dan 10 dan j dan Z saja.','Urutan 1 dan 10 dan j dan K saja.','Urutan 1 dan 10 dan k dan Z saja.','Urutan 1 dan 10 dan k dan K saja.','Urutan 1 dan 9 dan j dan Z saja.','Urutan 1 dan 9 dan j dan K saja.','Urutan 1 dan 9 dan k dan Z saja.','Urutan 1 dan 9 dan k dan K saja.','Urutan 4 dan 10 dan j dan Z saja.','Urutan 4 dan 10 dan j dan K saja.','Urutan 4 dan 10 dan k dan Z saja.','Urutan 4 dan 10 dan k dan K saja.','Urutan 4 dan 9 dan j dan Z saja.','Urutan 4 dan 9 dan j dan K saja.','Urutan 4 dan 9 dan k dan Z saja.','Urutan 4 dan 9 dan k dan K saja.']calculatecalculate(teks)Mengembalikan hasil dari perhitungan teks menggunakan modul pint.Mendukung perhitungan matematika dasar dengan satuan.Return value:Berupa class Quantity dari modul pintFormat:f"{result:~P}"            -> prettyf"{result:~H}"            -> htmlresult.to_base_units()    -> SIresult.to_compact()       -> human readablefx="3 meter * 10 cm * 3 km"res=calculate(fx)print(res)print(res.to_base_units())print(res.to_compact())print(f"{res:~P}")print(f"{res:~H}")Output:90centimeter*kilometer*meter900.0meter**3900.0meter**390cm·km·m90cmkmmchoiceschoices(iterator, title=None, prompt='', default=None)Memudahkan dalam membuat pilihan untuk user dalam tampilan consolea=choices("ini hanya satu pilihan")b=choices({"sedan":"audi","suv":"volvo","truck":"tesla",},title="Car Model",prompt="Pilih Mobil : ",)c=choices(iscandir(recursive=False),title="List File dan Folder",prompt="Pilih File atau Folder : ",)chunk_arraychunk_array(array, size, start=0)Membagi array menjadi potongan-potongan dengan besaran yg diinginkanarray=[2,3,12,3,3,42,42,1,43,2,42,41,4,24,32,42,3,12,32,42,42]print(chunck_array(array,5))print(list(chunck_array(array,5)))console_runconsole_run(info, command=None, print_info=True, capture_output=False)Menjalankan command seperti menjalankan command di Command Terminalconsole_run('dir')console_run('ls')create_foldercreate_folder(folder_name)Membuat folder.Membuat folder secara recursive dengan permission.create_folder("contoh_membuat_folder")create_folder("contoh/membuat/folder/recursive")create_folder("./contoh_membuat_folder/secara/recursive")datetime_from_stringdatetime_from_string(iso_string, timezone='UTC')Parse iso_string menjadi datetime objectprint(datetime_from_string("2022-12-12 15:40:13").isoformat())print(datetime_from_string("2022-12-12 15:40:13",timezone="Asia/Jakarta").isoformat())Output:2022-12-12T15:40:13+00:002022-12-12T15:40:13+07:00datetime_nowdatetime_now(timezone=None)Memudahkan dalam membuat Datetime untuk suatu timezone tertentuprint(datetime_now("Asia/Jakarta"))print(datetime_now("GMT"))print(datetime_now("Etc/GMT+7"))Output:2023-09-2408:31:17.555874+07:002023-09-2401:31:17.557479+00:002023-09-2318:31:17.560971-07:00dict_firstdict_first(d: dict, remove=False)Mengambil nilai (key, value) pertama dari dictionary dalam bentuk tuple.d={"key2":"value2","key3":"value3","key1":"value1",}print(dict_first(d,remove=True))print(dict_first(d))Output:('key2','value2')('key3','value3')dirnamedirname(path)Mengembalikan nama folder dari path.Tanpa trailing slash di akhir.print(dirname("/ini/nama/folder/ke/file.py"))Output:/ini/nama/folder/keexit_if_emptyexit_if_empty(*args)Keluar dari program apabila seluruh variabelsetara dengan emptyvar1=Nonevar2='0'exit_if_empty(var1,var2)filter_emptyfilter_empty(iterable, zero_is_empty=True, str_strip=True)Mengembalikan iterabel yang hanya memiliki nilaivar=[1,None,False,0,"0",True,{},['eee']]print(filter_empty(var))Output:<generatorobjectfilter_emptyat0x708580a980>get_class_methodget_class_method(cls)Mengembalikan berupa tuple yg berisi list dari method dalam classclassExampleGetClassMethod:defa():return[xforxinrange(10)]defb():return[xforxinrange(10)]defc():return[xforxinrange(10)]defd():return[xforxinrange(10)]print(get_class_method(ExampleGetClassMethod))Output:<generatorobjectget_class_methodat0x708580ab60>get_filemtimeget_filemtime(filename)Mengambil informasi last modification time file dalam nano secondsprint(get_filemtime(__file__))Output:1695518697535360116get_filesizeget_filesize(filename)Mengambil informasi file size dalam bytesprint(get_filesize(__file__))Output:465github_pullgithub_pull()Menjalankan commandgit pullgithub_pull()github_pushgithub_push(commit_msg=None)Menjalankan command status, add, commit dan pushgithub_push('Commit Message')github_usergithub_user(email=None, name=None)Menyimpan email dan nama user secara global sehingga tidak perlumenginput nya setiap saat.github_user('my@emil.com','MyName')iargviargv(key: int, cast=None, on_error=None)idumpsidumps(data, syntax='yaml', indent=4)Mengubah variabel data menjadi string untuk yang dapat dibaca untuk disimpan.String yang dihasilkan berbentuk syntax YAML/JSON/HTML.data={'a':123,'t':['disini','senang','disana','senang'],'l':(12,23,[12,42]),}print(idumps(data))print(idumps(data,syntax='html'))Output:a:123l:!!python/tuple-12-23--12-42t:-disini-senang-disana-senang<table><tbody><tr><th>a</th><td><span>123</span></td></tr><tr><th>t</th><td><ul><li><span>disini</span></li><li><span>senang</span></li><li><span>disana</span></li><li><span>senang</span></li></ul></td></tr><tr><th>l</th><td><ul><li><span>12</span></li><li><span>23</span></li><li><ul><li><span>12</span></li><li><span>42</span></li></ul></li></ul></td></tr></tbody></table>idumps_htmlidumps_html(data, indent=None)Serialisasi python variabel menjadi HTML.List -> <ul>...</ul>  
Dict -> <table>...</table>data={'abc':123,'list':[1,2,3,4,5],'dict':{'a':1,'b':2,'c':3},}print(idumps_html(data))Output:<table><tbody><tr><th>abc</th><td><span>123</span></td></tr><tr><th>list</th><td><ul><li><span>1</span></li><li><span>2</span></li><li><span>3</span></li><li><span>4</span></li><li><span>5</span></li></ul></td></tr><tr><th>dict</th><td><table><tbody><tr><th>a</th><td><span>1</span></td></tr><tr><th>b</th><td><span>2</span></td></tr><tr><th>c</th><td><span>3</span></td></tr></tbody></table></td></tr></tbody></table>ienvienv(on_windows=None, on_linux=None)Mengambalikan hasil berdasarkan environment dimana program dijalankangetch=__import__(ienv(on_windows="msvcrt",on_linux="getch"))inherit=ienv(on_windows=[BaseForWindows,BaseEnv,object],on_linux=[SpecialForLinux,BaseForLinux,BaseEnv,object])classExampleIEnv(*inherit):passiexeciexec(python_syntax, import_pypipr=True)improve exec() python function untuk mendapatkan outputnyaprint(iexec('print(9*9)'))Output:81ijoinijoin(iterable, separator='', start='', end='', remove_empty=False, recursive=True, recursive_flat=False, str_strip=False)Simplify Python join functions like PHP function.Iterable bisa berupa sets, tuple, list, dictionary.arr={'asd','dfs','weq','qweqw'}print(ijoin(arr,', '))arr='/ini/path/seperti/url/'.split('/')print(ijoin(arr,','))print(ijoin(arr,',',remove_empty=True))arr={'a':'satu','b':(12,34,56),'c':'tiga','d':'empat'}print(ijoin(arr,separator='</li>\n<li>',start='<li>',end='</li>',recursive_flat=True))print(ijoin(arr,separator='</div>\n<div>',start='<div>',end='</div>'))print(ijoin(10,' '))Output:weq,dfs,asd,qweqw,ini,path,seperti,url,ini,path,seperti,url<li>satu</li><li>12</li><li>34</li><li>56</li><li>tiga</li><li>empat</li><div>satu</div><div><div>12</div><div>34</div><div>56</div></div><div>tiga</div><div>empat</div>10iloadsiloads(data, syntax='yaml')Mengubah string data hasil dari idumps menjadi variabel.String data adalah berupa syntax YAML.data={'a':123,'t':['disini','senang','disana','senang'],'l':(12,23,[12,42])}s=idumps(data)print(iloads(s))iloads_htmliloads_html(html)Mengambil data yang berupa list<ul>, dan table<table>dari htmldan menjadikannya data python berupa list.setiap data yang ditemukan akan dibungkus dengan tuple sebagai separator.list (<ul>)     -> list         -> list satu dimensi  
table (<table>) -> list[list]   -> list satu dimensi didalam listapabila data berupa ul maka dapat dicek type(data) -> html_ulapabila data berupa ol maka dapat dicek type(data) -> html_olapabila data berupa dl maka dapat dicek type(data) -> html_dlapabila data berupa table maka dapat dicek type(data) -> html_tablepprint.pprint(iloads_html(iopen("https://harga-emas.org/")),depth=10)pprint.pprint(iloads_html(iopen("https://harga-emas.org/1-gram/")),depth=10)input_charinput_char(prompt=None, prompt_ending='', newline_after_input=True, echo_char=True, default=None)Meminta masukan satu huruf tanpa menekan Enter.input_char("Input char : ")input_char("Input char : ",default='Y')input_char("Input Char without print : ",echo_char=False)iopeniopen(path, data=None, regex=None, css_select=None, xpath=None, file_append=False)Membaca atau Tulis pada path yang bisa merupakan FILE maupun URL.Baca File :Membaca seluruh file.Jika berhasil content dapat diparse dengan regex.Apabila File berupa html, dapat diparse dengan css atau xpath.Tulis File :Menulis pada file.Jika file tidak ada maka akan dibuat.Jika file memiliki content maka akan di overwrite.Membaca URL :Mengakses URL dan mengembalikan isi html nya berupa teks.Content dapat diparse dengan regex, css atau xpath.Tulis URL :Mengirimkan data dengan metode POST ke url.Jika berhasil dan response memiliki content, maka dapat diparsedengan regex, css atau xpath.# FILEprint(iopen("__iopen.txt","mana aja"))print(iopen("__iopen.txt",regex="(\w+)"))# URLprint(iopen("https://www.google.com/",css_select="a"))print(iopen("https://www.google.com/",dict(coba="dulu"),xpath="//a"))Output:8['mana','aja'][<Elementaat0x7085975540>,<Elementaat0x70850140f0>,<Elementaat0x70850437a0>,<Elementaat0x7085043840>,<Elementaat0x7085043890>,<Elementaat0x70850438e0>,<Elementaat0x7085043930>,<Elementaat0x7085043980>,<Elementaat0x70850439d0>,<Elementaat0x7085043a20>,<Elementaat0x7085043a70>,<Elementaat0x7085043ac0>,<Elementaat0x7085043b10>,<Elementaat0x7085043b60>,<Elementaat0x7085043bb0>,<Elementaat0x7085043c00>,<Elementaat0x7085043c50>,<Elementaat0x7085043ca0>]Falseiprintiprint(*args, color=None, sort_dicts=False, **kwargs)Improve print function dengan menambahkan color dan pretty printColor menggunakan colorama Fore + Back + Styleiprint('yang ini',{'12':12,'sdsd':{'12':21,'as':[88]}},color=colorama.Fore.BLUE+colorama.Style.BRIGHT)irangeirange(start, finish, step=1)Meningkatkan fungsi range() dari python untuk pengulangan menggunakan hurufprint(irange('a','c'))print(irange('z','a',10))print(list(irange('a','z',10)))print(list(irange(1,'7')))print(list(irange(10,5)))Output:<generatorobjectirangeat0x70858e3120><generatorobjectirangeat0x70858e3120>['a','k','u'][1,2,3,4,5,6,7][10,9,8,7,6,5]ireplaceireplace(string: str, replacements: dict, flags=re.IGNORECASE|re.MULTILINE|re.DOTALL)STRing TRanslate mengubah string menggunakan kamus dari dict.Replacement dapat berupa text biasa ataupun regex pattern.Apabila replacement berupa regex, gunakan raw stringr"..."Untuk regex capturing gunakan(...), dan untuk mengaksesnyagunakan\1,\2, .., dst.text='aku ini mau ke sini'replacements={"sini":"situ",r"(ini)":r"itu dan \1",}print(ireplace(text,replacements))Output:akuitudaninimaukesituis_emptyis_empty(variable, empty=[None, False, 0, 0, '0', '', '-0', '\n', '\t', set(), {}, [], ()])Mengecek apakah variable setara dengan nilai kosong pada empty.Pengecekan nilai yang setara menggunakan simbol '==', sedangkan untukpengecekan lokasi memory yang sama menggunakan keyword 'is'print(is_empty("teks"))print(is_empty(True))print(is_empty(False))print(is_empty(None))print(is_empty(0))print(is_empty([]))Output:FalseFalseTrueTrueTrueTrueis_iterableis_iterable(var, str_is_iterable=False)Mengecek apakah suatu variabel bisa dilakukan forloop atau tidaks='ini string'print(is_iterable(s))l=[12,21,2,1]print(is_iterable(l))r=range(100)print(is_iterable(r))d={'a':1,'b':2}print(is_iterable(d.values()))Output:FalseTrueTrueTrueis_valid_urlis_valid_url(path)Mengecek apakah path merupakan URL yang valid atau tidak.Cara ini merupakan cara yang paling efektif.print(is_valid_url("https://chat.openai.com/?model=text-davinci-002-render-sha"))print(is_valid_url("https://chat.openai.com/?model/=text-dav/inci-002-render-sha"))Output:TrueTrueiscandiriscandir(folder_name='.', glob_pattern='*', recursive=True, scan_file=True, scan_folder=True)Mempermudah scandir untuk mengumpulkan folder dan file.print(iscandir())print(list(iscandir("./",recursive=False,scan_file=False)))Output:<generatorobjectiscandirat0x7084fd1a40>[PosixPath('dist'),PosixPath('.git'),PosixPath('pypipr'),PosixPath('__pycache__'),PosixPath('.vscode')]isplitisplit(text, separator='', include_separator=False)Memecah text menjadi list berdasarkan separator.t='/ini/contoh/path/'print(isplit(t,separator='/'))Output:['','ini','contoh','path','']loglog(text=None)Decorator untuk mempermudah pembuatan log karena tidak perlu mengubahfungsi yg sudah ada.Melakukan print ke console untuk menginformasikan proses yg sedangberjalan didalam program.@logdefsome_function():pass@log()defsome_function_again():pass@log("Calling some function")defsome_function_more():passsome_function()some_function_again()some_function_more()password_generatorpassword_generator(length=8, characters='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!"#$%&\'()*+,-./:;<=>?@[\\]^_{|}~')`Membuat pssword secara acakprint(password_generator())Output:/U`~^j#,pip_freeze_without_versionpip_freeze_without_version(filename=None)Memberikan list dari dependencies yang terinstall tanpa version.Bertujuan untuk menggunakan Batteries Included Python.print(pip_freeze_without_version())poetry_publishpoetry_publish(token=None)Publish project to pypi,orgpoetry_publish()poetry_update_versionpoetry_update_version(mayor=False, minor=False, patch=False)Update versi pada pyproject.toml menggunakan poetrypoetry_update_version()print_colorizeprint_colorize(text, color='\x1b[32m', bright='\x1b[1m', color_end='\x1b[0m', text_start='', text_end='\n')Print text dengan warna untuk menunjukan text pentingprint_colorize("Print some text")print_colorize("Print some text",color=colorama.Fore.RED)print_dirprint_dir(var, colorize=True)Print property dan method yang tersedia pada variabelp=pathlib.Path("https://www.google.com/")print_dir(p,colorize=False)print_logprint_log(text)Akan melakukan print ke console.Berguna untuk memberikan informasi proses program yg sedang berjalan.print_log("Standalone Log")print_to_last_lineprint_to_last_line(text: str)Melakukan print ke konsol tetapi akan menimpa baris terakhir.Berguna untuk memberikan progress secara interaktif.c=input("masukkan apa saja : ")print_to_last_line(f"masukkan apa saja :{c}[ok]")Output:masukkanapasaja:[Fmasukkanapasaja:[ok]random_boolrandom_bool()Menghasilkan nilai random True atau False.Fungsi ini merupakan fungsi tercepat untuk mendapatkan random bool.Fungsi ini sangat cepat, tetapi pemanggilan fungsi ini membutuhkanoverhead yg besar.print(random_bool())Output:Falseset_timeoutset_timeout(interval, func, args=None, kwargs=None)Menjalankan fungsi ketika sudah sekian detik.Apabila timeout masih berjalan tapi kode sudah selesai dieksekusi semua, makaprogram tidak akan berhenti sampai timeout selesai, kemudian fungsi dijalankan,kemudian program dihentikan.set_timeout(3,lambda:print("Timeout 3"))x=set_timeout(7,print,args=["Timeout 7"])print(x)print("menghentikan timeout 7")x.cancel()Output:<Timer(Thread-2,started483240426752)>menghentikantimeout7sets_orderedsets_ordered(iterator)Hanya mengambil nilai unik dari suatu listarray=[2,3,12,3,3,42,42,1,43,2,42,41,4,24,32,42,3,12,32,42,42]print(sets_ordered(array))print(list(sets_ordered(array)))Output:<generatorobjectsets_orderedat0x708582b100>[2,3,12,42,1,43,41,4,24,32]str_cmpstr_cmp(t1, t2)Membandingakan string secara incase-sensitive menggunakan lower().Lebih cepat dibandingkan upper(), casefold(), re.fullmatch(), len().perbandingan ini sangat cepat, tetapi pemanggilan fungsi ini membutuhkanoverhead yg besar.print(str_cmp('teks1','Teks1'))Output:Truetext_colorizetext_colorize(text, color='\x1b[32m', bright='\x1b[1m', color_end='\x1b[0m')return text dengan warna untuk menunjukan text pentingtext_colorize("Print some text")text_colorize("Print some text",color=colorama.Fore.RED)to_strto_str(value)Mengubah value menjadi string literalprint(to_str(5))print(to_str([]))print(to_str(False))print(to_str(True))print(to_str(None))Output:5FalseTrueCLASSAPIMixinViewAPIMixinViewAPIView adalah class view untuk membuat Website APICara kerjanya adalah dengan menggunakan variabel GET untuk menerima data.Class ini tidak bisa digunakan sendiri.Class ini harus menjadi mixin Class View karena perlu trigger untukmemanggil method get().classExampleAPIView(APIMixinView,View):passComparePerformanceComparePerformanceMenjalankan seluruh method dalam class,Kemudian membandingkan waktu yg diperlukan.Nilai 100 berarti yang tercepat.classExampleComparePerformance(ComparePerformance):# number = 1z=10defa(self):return(xforxinrange(self.z))defb(self):returntuple(xforxinrange(self.z))defc(self):return[xforxinrange(self.z)]defd(self):returnlist(xforxinrange(self.z))pprint.pprint(ExampleComparePerformance().compare_result(),depth=100)print(ExampleComparePerformance().compare_performance())print(ExampleComparePerformance().compare_performance())print(ExampleComparePerformance().compare_performance())print(ExampleComparePerformance().compare_performance())print(ExampleComparePerformance().compare_performance())PintUregQuantityPintUregQuantityRunParallelRunParallelMenjalankan program secara bersamaan.class RunParalleldidesain hanya untuk pemrosesan data saja.Penggunaannyaclass RunParalleldengan cara membuat instancesub class beserta data yg akan diproses, kemudian panggil fungsiyg dipilihrun_asyncio / run_multi_threading / run_multi_processing,kemudian dapatkan hasilnya.class RunParalleltidak didesain untuk menyimpan data, karenasetiap module terutama modulemultiprocessingtidak dapat mengaksesdata kelas dari proses yg berbeda.Semua methods akan dijalankan secara paralel kecuali method dengannama yg diawali underscore_Method untuk multithreading/multiprocessing harus memiliki 2parameter, yaitu:result: dictdanq: queue.Queue. Parameterresultdigunakan untuk memberikan return value dari method, danParameterqdigunakan untuk mengirim data antar proses.Method untuk asyncio harus menggunakan keywordasync def, danuntuk perpindahan antar kode menggunakanawait asyncio.sleep(0),dan keywordreturnuntuk memberikan return value.Return Value berupa dictionary dengan key adalah nama function,dan value adalah return value dari setiap fungsiMenjalankan Multiprocessing harus berada dalam blokif __name__ == "__main__":karena area global pada program akandiproses lagi. Terutama pada sistem operasi windows.run_asyncio()akan menjalankan kode dalam satu program, hanyasaja alur program dapat berpindah-pindah menggunkanawait asyncio.sleep(0).run_multi_threading()akan menjalankan program dalam satu CPU,hanya saja dalam thread yang berbeda. Walaupun tidak benar-benarberjalan secara bersamaan namun bisa meningkatkan kecepatanpenyelesaian program, dan dapat saling mengakses resource antarprogram.  Akses resource antar program bisa secara langsung maupunmenggunakan parameter yang sudah disediakan yaituresult: dictdanq: queue.Queue.run_multi_processing()akan menjalankan program dengan beberapaCPU. Program akan dibuatkan environment sendiri yang terpisah dariprogram induk. Keuntungannya adalah program dapat benar-benar berjalanbersamaan, namun tidak dapat saling mengakses resource secara langsung.Akses resource menggunakan parameter yang sudah disediakan yaituresult: dictdanq: queue.Queue.classExampleRunParallel(RunParallel):z="ini"def__init__(self)->None:self.pop=random.randint(0,100)def_set_property_here(self,v):self.prop=vdefa(self,result:dict,q:queue.Queue):result["z"]=self.zresult["pop"]=self.popresult["a"]="a"q.put("from a 1")q.put("from a 2")defb(self,result:dict,q:queue.Queue):result["z"]=self.zresult["pop"]=self.popresult["b"]="b"result["q_get"]=q.get()defc(self,result:dict,q:queue.Queue):result["z"]=self.zresult["pop"]=self.popresult["c"]="c"result["q_get"]=q.get()asyncdefd(self):print("hello")awaitasyncio.sleep(0)print("hello")result={}result["z"]=self.zresult["pop"]=self.popresult["d"]="d"returnresultasyncdefe(self):print("world")awaitasyncio.sleep(0)print("world")result={}result["z"]=self.zresult["pop"]=self.popresult["e"]="e"returnresultif__name__=="__main__":print(ExampleRunParallel().run_asyncio())print(ExampleRunParallel().run_multi_threading())print(ExampleRunParallel().run_multi_processing())