

<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>thread &#8211; Max的程式語言筆記</title>
	<atom:link href="https://stackoverflow.max-everyday.com/tag/thread/feed/" rel="self" type="application/rss+xml" />
	<link>https://stackoverflow.max-everyday.com</link>
	<description>我要當一個豬頭，快樂過每一天</description>
	<lastBuildDate>Fri, 24 Jan 2025 07:16:13 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://stackoverflow.max-everyday.com/wp-content/uploads/2017/02/max-stackoverflow-256.png</url>
	<title>thread &#8211; Max的程式語言筆記</title>
	<link>https://stackoverflow.max-everyday.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>python 多執行序讀取檔案</title>
		<link>https://stackoverflow.max-everyday.com/2025/01/python-multi-thead-read-file-executor/</link>
					<comments>https://stackoverflow.max-everyday.com/2025/01/python-multi-thead-read-file-executor/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Sat, 18 Jan 2025 06:42:54 +0000</pubDate>
				<category><![CDATA[Python筆記]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[thread]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=6076</guid>

					<description><![CDATA[原本的程式是使用 for loop 去讀取某一個...]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1024" height="1024" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2025/01/copy_lost_out.png?v=1737182035" alt="" class="wp-image-6077" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2025/01/copy_lost_out.png?v=1737182035 1024w, https://stackoverflow.max-everyday.com/wp-content/uploads/2025/01/copy_lost_out-600x600.png?v=1737182035 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2025/01/copy_lost_out-300x300.png?v=1737182035 300w, https://stackoverflow.max-everyday.com/wp-content/uploads/2025/01/copy_lost_out-768x768.png?v=1737182035 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>原本的程式是使用 for loop 去讀取某一個資料夾下的每一個檔案, 當檔案數到  4萬個的時候, 效率就變很差, 光讀取完4萬個檔案, 似乎就花了4分鐘, 因為 python 預設並不會使用 multi-thread 去開檔案. </p>



<p>改用 multi-thread 寫法之後, CPU 使用率直接上升為 100%, 程式效率變很好, 大約不到一分鐘就讀完並處理完 9萬個檔案. </p>



<p>完成程式碼, 主程式:<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/copy_lost_out.py">https://github.com/max32002/MaxFontScripts/blob/master/copy_lost_out.py</a></p>



<p>實際執行的副程式:<br><a href="https://github.com/max32002/MaxFontScripts/blob/master/LibGlyph.py">https://github.com/max32002/MaxFontScripts/blob/master/LibGlyph.py</a></p>



<h2 class="wp-block-heading">for loop 寫法:</h2>



<pre class="wp-block-code"><code>for f in files:
    extension = splitext(f)
    if extension&#91;1] == '.glyph':
        glyph_info = load_unicode_from_file(join(ff_folder,f), unicode_field)
        unicode_info = 0
        if 'unicode' in glyph_info:
            unicode_info = glyph_info&#91;'unicode']

        if check_altuni2:
            if 'altuni2' in glyph_info:
                altuni2_info = glyph_info&#91;'altuni2']
                if len(altuni2_info) &gt; 0:
                    altuni2_int = int(altuni2_info,16)
                    my_set.add(altuni2_int)
                    my_dict&#91;altuni2_int] = f

        if unicode_info &gt; 0 and unicode_info &lt; 0x110000:
            my_set.add(unicode_info)
            my_dict&#91;unicode_info] = f    </code></pre>



<p></p>



<h2 class="wp-block-heading">multi-thread 寫法:</h2>



<pre class="wp-block-code"><code>file_paths = &#91;os.path.join(ff_folder, file) for file in os.listdir(ff_folder) if file.endswith('.glyph') and os.path.isfile(os.path.join(ff_folder, file))]

results = &#91;]
with concurrent.futures.ThreadPoolExecutor() as executor:
results = executor.map(load_unicode_from_file, file_paths, &#91;unicode_field] * len(file_paths))

for glyph_info in results:
unicode_info = 0
if 'unicode' in glyph_info:
unicode_info = glyph_info&#91;'unicode']

if check_altuni2:
    if 'altuni2' in glyph_info:
        altuni2_info = glyph_info&#91;'altuni2']
        if len(altuni2_info) > 0:
            altuni2_int = int(altuni2_info,16)
            my_set.add(altuni2_int)
            my_dict&#91;altuni2_int] = f

if unicode_info > 0 and unicode_info &lt; 0x110000:
    my_set.add(unicode_info)
    file_name = os.path.basename(glyph_info&#91;"filepath"])
    my_dict&#91;unicode_info] = file_name</code></pre>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2025/01/python-multi-thead-read-file-executor/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
