マルチスレッドを使用してドキュメントを処理する際の落とし穴

1つは、問題が見つかりました。

複数のスレッドを使用してドキュメントを処理する場合、コンソールにデータを印刷する場合、タスクは並行して実行され
、同時に実行されることがわかりました。ただし、同じテキストをtxtテキストに書き込む場合、テキストのコンテンツはで実行されます。シングルスレッド。

1.以下はコードです

#codint=utf-8

from multiprocessing import Process
import time

def run(Str,Num):
    m = 1
    with open("test.txt","a",encoding="utf-8") as FileObj:
        while True:
            FileObj.write("run(%s)方法正在运行,第 %d 次运行,n的值是 %d\n"%(Str,m,Num))
            print("run(%s)方法正在运行,第 %d 次运行,n的值是 %d\n"%(Str,m,Num))
            m += 1
            time.sleep(1)
            if m >= 10:
                break
if __name__ == '__main__':
    with open("test.txt", "a",encoding="utf-8") as FileObj:
        FileObj.write("主进程启动。。。\n")
        print("主进程启动。。。\n")
        # 创建子进程
        # target说明进程执行的任务
        n = 1
        PObj = Process(target=run,args=("nice",n))
        # 启动进程
        PObj.start()
        while True:
            FileObj.write("main()方法正在运行,第 %d 次运行\n"%n)
            print("main()方法正在运行,第 %d 次运行\n"%n)
            n += 1
            time.sleep(1)
            if n >= 10:
                break

2.コンソールにスクリーンショットを印刷します

ここに画像の説明を挿入

3.txtテキストのスクリーンショット

ここに画像の説明を挿入

第二に、問題の原因

  1. この問題は、printステートメントの実行後、印刷されたデータが直接出力されるために発生します。
  2. ファイルを書き込む文が実行された後、データはコンピュータのメモリに保存されます。タスクが実行された後、メモリ内のデータはファイルに保存され、ファイルは正常に保存されるように閉じられます。
  3. したがって、テキストに保存されたデータは並列ではありません

三、解決策

  1. 各メソッドのファイル書き込みステートメントが実行されると、すぐに保存操作が実行されるため、どのメソッドが呼び出されても、データはすぐに保存されます。

第四に、解決効果

  1. 上記の方法で解いた後、ファイル内のデータも並列になります
    ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/zhuan_long/article/details/112213977