目次
CPU
プロセス
Thread
Python でのスレッドとプロセスの使用
线程间变量的共享
ホームページ バックエンド開発 Python チュートリアル 前回の記事で Python のプロセスとスレッドを深く理解しました

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

Nov 17, 2020 pm 04:25 PM
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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

Windows 8でコードを実行できます Windows 8でコードを実行できます Apr 15, 2025 pm 07:24 PM

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

Visual StudioコードはPythonで使用できますか Visual StudioコードはPythonで使用できますか Apr 15, 2025 pm 08:18 PM

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

PHPとPython:彼らの歴史を深く掘り下げます PHPとPython:彼らの歴史を深く掘り下げます Apr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

ターミナルVSCODEでプログラムを実行する方法 ターミナルVSCODEでプログラムを実行する方法 Apr 15, 2025 pm 06:42 PM

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。

VSCODE拡張機能は悪意がありますか? VSCODE拡張機能は悪意がありますか? Apr 15, 2025 pm 07:57 PM

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。

See all articles