前回の記事で Python のプロセスとスレッドを深く理解しました
Python ビデオ チュートリアル 列ではプロセスとスレッドを紹介します。
プロセスとスレッドはオペレーティング システムの基本概念です。これらの間にはいくつかの長所、短所、相違点があります。では、Python でプロセスとスレッドを使用するにはどうすればよいでしょうか?
CPU
コンピュータの核となるのは CPU であり、コンピュータのすべての計算タスクを引き受けます。CPU は工場のようなもので、常に稼働しており、オペレーティング システムがコンピュータを管理します。タスクのスケジューリング、リソースの割り当て、管理を担当します。
プロセス
プロセスとは、システム内で独立して実行できる基本単位を指し、リソース割り当ての基本単位として使用されます。機械命令、データ、およびデータのセットで構成されます。スタックなど、独立して実行できるプロセスです。アクティビティ エンティティ。
コンピューターを開くとプロセスとスレッドが表示されます。[マイ コンピューター] をクリックして CPU の動作を確認します。
図に示すように、CPU は合計 190 のプロセスと 2620 のスレッドを実行しています。たとえば、[QQ] を再度クリックして別のアカウントにログインすると、別の QQ プロセスが開きます。
つまり、コンピューター上で複数の WeChat にログインしたい場合です。 WeChat ショートカットを見つけて、右クリックしてプロパティを表示し、ターゲット内のリンクをコピーします。新しいメモ帳を作成し、ランダムな名前を付け、ダブルクリックして開き、「start ""
」と入力します。英語で (引用符に注意してください)、前後にスペースを入れて)、コピーしたリンク (つまり、WeChat インストールへのパス) を貼り付けてから、行全体をコピーし、次のように開きたい場合は数行を貼り付けます。できるだけ多くの WeChat アカウントを作成し、ファイルを保存し、サフィックスを Bat に変更します。ダブルクリックするだけで実行できます。
Thread
スレッド(Thread)は軽量プロセスとも呼ばれ、オペレーティングシステムが計算スケジューリングを実行できる最小単位です。プロセス中。 は、プロセス中の実際の操作単位です。
Ruan Yifeng が書いたブログを思い出します。工場内の電力は限られており、一度に 1 つの作業場にしか供給できないと仮定します。言い換えれば、1 つのワークショップが動作し始めると、他のワークショップは動作を停止する必要があります。その背後にある意味は、1 つの CPU は一度に 1 つのタスクしか実行できないということです。
#プロセスは工場現場のようなもので、CPU が処理できる単一のタスクを表します。 CPU は常に 1 つのプロセスを実行しており、他のプロセスは非実行状態になります。
スレッドはワークショップの労働者のようなものです。プロセスには、タスクを完了するために連携して動作する複数のスレッドを含めることができます。
要約: プログラムには複数のプロセスを含めることができ、複数のプロセスは同時に実行され、互いに独立しているため、プロセスはシステム内のリソース割り当てとスケジューリングの基本単位でもあります。技術的に言えば、プロセスは実行時のプログラムのインスタンスです。スレッドは最小の実行単位であり、プロセスは少なくとも 1 つのスレッドで構成されます。プロセスとスレッドがどのようにスケジュールされるかは、オペレーティング システムによって完全に決定されます。
Python でのスレッドとプロセスの使用
次に、Python でのスレッドとプロセスの使用について説明します。
Python では、スレッドのサポートは 2 つの標準ライブラリ thread
と Threading
を通じて提供されます。threading
は thread## をサポートします #カプセル化されています。
threading モジュールは、
Thread、
Lock、
RLOCK、
Condition およびその他のコンポーネント
_thread モジュールと
threading モジュールにあります。通常、
スレッドを通じてインポートします。
>> from threading import 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())复制代码
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()
来阻塞,t1
和t2
两个线程同时执行,由于位置关系先打印hello
,再打印hi
,这个时候都sleep2秒钟,但是它sleep2秒钟,主程序还是在执行,所以下面打印print('主线程完毕')
,最后才打印Bye
和OUT
。
线程间变量的共享
在多线程中,所有变量对于所有线程都是共享的,因此,线程之间共享数据的最大危险在于多个线程同时修改一个变量,那就乱套了,所以我们需要互斥锁,来锁住数据。
代码如上图所示,上面代码中打印的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)
,就是遍历了1000000
,incr
和decr
的方法都加上一起了,在这1000000
次遍历中,不知道有多少加,多少减,比如,我1000000都是加,没有减,a就是1000000,但是这种情况的概率很低。
如果你就是想出现0,其实只需要加一个互斥锁就可以了。这样你加多少次,我就减多少次,加减的次数不会叠加。因此来了lock的用法,具体代码如下图所示。
这个a怎么运行都是 0。因为我们把这个a锁上了,这样就加1000000次,减1000000次,怎么出来都是我们的0。
相关免费学习推荐:python视频教程
以上が前回の記事で Python のプロセスとスレッドを深く理解しましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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