検索
ホームページバックエンド開発Python チュートリアル前回の記事で Python のプロセスとスレッドを深く理解しました

Python ビデオ チュートリアル 列ではプロセスとスレッドを紹介します。

前回の記事で Python のプロセスとスレッドを深く理解しました

プロセスとスレッドはオペレーティング システムの基本概念です。これらの間にはいくつかの長所、短所、相違点があります。では、Python でプロセスとスレッドを使用するにはどうすればよいでしょうか?

CPU

コンピュータの核となるのは CPU であり、コンピュータのすべての計算タスクを引き受けます。CPU は工場のようなもので、常に稼働しており、オペレーティング システムがコンピュータを管理します。タスクのスケジューリング、リソースの割り当て、管理を担当します。

プロセス

プロセスとは、システム内で独立して実行できる基本単位を指し、リソース割り当ての基本単位として使用されます。機械命令、データ、およびデータのセットで構成されます。スタックなど、独立して実行できるプロセスです。アクティビティ エンティティ。

コンピューターを開くとプロセスとスレッドが表示されます。[マイ コンピューター] をクリックして CPU の動作を確認します。

図に示すように、CPU は合計 190 のプロセスと 2620 のスレッドを実行しています。たとえば、[QQ] を再度クリックして別のアカウントにログインすると、別の QQ プロセスが開きます。

つまり、コンピューター上で複数の WeChat にログインしたい場合です。 WeChat ショートカットを見つけて、右クリックしてプロパティを表示し、ターゲット内のリンクをコピーします。新しいメモ帳を作成し、ランダムな名前を付け、ダブルクリックして開き、「start ""」と入力します。英語で (引用符に注意してください)、前後にスペースを入れて)、コピーしたリンク (つまり、WeChat インストールへのパス) を貼り付けてから、行全体をコピーし、次のように開きたい場合は数行を貼り付けます。できるだけ多くの WeChat アカウントを作成し、ファイルを保存し、サフィックスを Bat に変更します。ダブルクリックするだけで実行できます。

前回の記事で Python のプロセスとスレッドを深く理解しました

Thread

スレッド(Thread)は軽量プロセスとも呼ばれ、オペレーティングシステムが計算スケジューリングを実行できる最小単位です。プロセス中。 は、プロセス中の実際の操作単位です。

Ruan Yifeng が書いたブログを思い出します。工場内の電力は限られており、一度に 1 つの作業場にしか供給できないと仮定します。言い換えれば、1 つのワークショップが動作し始めると、他のワークショップは動作を停止する必要があります。その背後にある意味は、1 つの CPU は一度に 1 つのタスクしか実行できないということです。

#プロセスは工場現場のようなもので、CPU が処理できる単一のタスクを表します。 CPU は常に 1 つのプロセスを実行しており、他のプロセスは非実行状態になります。

スレッドはワークショップの労働者のようなものです。プロセスには、タスクを完了するために連携して動作する複数のスレッドを含めることができます。

要約: プログラムには複数のプロセスを含めることができ、複数のプロセスは同時に実行され、互いに独立しているため、プロセスはシステム内のリソース割り当てとスケジューリングの基本単位でもあります。技術的に言えば、プロセスは実行時のプログラムのインスタンスです。スレッドは最小の実行単位であり、プロセスは少なくとも 1 つのスレッドで構成されます。プロセスとスレッドがどのようにスケジュールされるかは、オペレーティング システムによって完全に決定されます。

Python でのスレッドとプロセスの使用

次に、Python でのスレッドとプロセスの使用について説明します。

Python では、スレッドのサポートは 2 つの標準ライブラリ threadThreading を通じて提供されます。threadingthread## をサポートします #カプセル化されています。 threading モジュールは、ThreadLockRLOCKCondition およびその他のコンポーネント

を提供します。 Thread

Python でのスレッドとプロセスの使用は、Thread クラスを通じて行われます。このクラスは、

_thread モジュールと threading モジュールにあります。通常、スレッドを通じてインポートします。

デフォルトでは、インタープリタにエラーがない限り、スレッドは使用可能です。

>> from threading import Thread复制代码
次に、Thread クラスの共通パラメータの説明とインスタンス メソッドを示します。

公式ドキュメントにある標準的なマルチスレッドの例を見てみましょう。

import threading
import time
# 定义线程要运行的函数
def func(name):
    # 为了便于观察,睡眠2秒
    time.sleep(2)
    print("My name is %s\t" % name)

# 创建第一个线程的实例,args参数是一个元组,后面必须加逗号分隔
t1 = threading.Thread(target=func, args=("Runsen",))
# 创建第二个线程的实例
t2 = threading.Thread(target=func, args=("Maoli",))
t1.start()
t2.start()
# 先打印线程名 
print(t1.getName())
print(t2.getName())复制代码
2 つのスレッドが同時に実行されているため、

print の結果には改行がありません。

# 以下では、スレッド モジュールの使用法をさらに詳しく説明するために、次のコードを作成しました。

# -*- coding:utf-8 -*-# time :2019/4/9 21:52# author: Runsenimport threadingimport timedef fun1():
    print('hello')
    time.sleep(2)
    print('Bye')def fun2():
    print('hi')
    time.sleep(2)
    print('OUT')
t1 = threading.Thread(target=fun1)
t2 = threading.Thread(target=fun2)
t1.start()
t2.start()# t1.join()# t2.join()print('主线程完毕')复制代码
以下は出力です。

hello
hi
主线程完毕
Bye
OUT复制代码

我们先不加join()来阻塞,t1t2两个线程同时执行,由于位置关系先打印hello,再打印hi,这个时候都sleep2秒钟,但是它sleep2秒钟,主程序还是在执行,所以下面打印print('主线程完毕'),最后才打印ByeOUT

线程间变量的共享

在多线程中,所有变量对于所有线程都是共享的,因此,线程之间共享数据的最大危险在于多个线程同时修改一个变量,那就乱套了,所以我们需要互斥锁,来锁住数据。

代码如上图所示,上面代码中打印的a是1还是2?

答案是:2。因为出现了global关键字,线程间变量的共享,在func函数中的a是全局变量。因此在函数中a的值发生了变化。

下面,我们提高一点点难度,代码如下图所示,还是猜一猜a是啥东西。注意:这里出现了join来阻塞,并且增加了加和减的操作。

相信很多人都认为是0,其实这个a的值是变化的,可能这次是0 ,下次是1,还有可能是1000000,比如,我可以

a就是在[-1000000,1000000]中的一个随机数。

为什么呢?这是因为虽然他们是同时运行的,但是同时在修改我们的a,那就乱了。a在for i in range(1000000),就是遍历了1000000incrdecr的方法都加上一起了,在这1000000次遍历中,不知道有多少加,多少减,比如,我1000000都是加,没有减,a就是1000000,但是这种情况的概率很低。

如果你就是想出现0,其实只需要加一个互斥锁就可以了。这样你加多少次,我就减多少次,加减的次数不会叠加。因此来了lock的用法,具体代码如下图所示。

这个a怎么运行都是 0。因为我们把这个a锁上了,这样就加1000000次,减1000000次,怎么出来都是我们的0。

相关免费学习推荐:python视频教程

以上が前回の記事で Python のプロセスとスレッドを深く理解しましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はjuejinで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Python:主要なアプリケーションの調査Python:主要なアプリケーションの調査Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間でどのくらいのPythonを学ぶことができますか?2時間でどのくらいのPythonを学ぶことができますか?Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Apr 02, 2025 am 07:12 AM

Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...

風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの精度を改善する方法は?風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの精度を改善する方法は?Apr 02, 2025 am 07:09 AM

風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの問題を解決する方法は?風光明媚なスポットコメントと分析を行っているとき、私たちはしばしばJieba Wordセグメンテーションツールを使用してテキストを処理します...

正規表現を使用して、最初の閉じたタグと停止に一致する方法は?正規表現を使用して、最初の閉じたタグと停止に一致する方法は?Apr 02, 2025 am 07:06 AM

正規表現を使用して、最初の閉じたタグと停止に一致する方法は? HTMLまたは他のマークアップ言語を扱う場合、しばしば正規表現が必要です...

Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は?Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は?Apr 02, 2025 am 07:03 AM

Investing.comの反クラウリング戦略を理解する多くの人々は、Investing.com(https://cn.investing.com/news/latest-news)からのニュースデータをクロールしようとします。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい