スレッドがすぐに開始された後にコードが実行されないのはなぜですか?ブロックではないはずですか? [複製] -- python フィールド と multithreading フィールド と asynchronous フィールド 関連 問題

Why doesn't the code is executing after thread start right away? Isn't it supposed to be non-blocking? [duplicate]












0
vote

問題

日本語

こんにちは私は私のコードが私のスレッドを始めている行に立ち往生している理由を手に入れることはできません。このスレッドでは、これら2つの非同期タスクを実行しても構わないと思っていますが、スレッドをターゲットとしてスレッドを起動するとすぐに(T3.Start())、ブロックを取得し、行が追跡されていません。 t3.start()行の後、行の印刷文は実行されません。 P.S.私の非同期タスクは大丈夫です。

'' '

<事前> <コード> import threading import os from time import sleep import asyncio async def asynctask1(): print("Task 1 assigned to thread: {}".format(threading.current_thread().name)) print("ID of process running task 1: {}".format(os.getpid())) while True: print("I am async task 1") await asyncio.sleep(2) async def asynctask2(): print("Task 2 assigned to thread: {}".format(threading.current_thread().name)) print("ID of process running task 2: {}".format(os.getpid())) while True: print("Hi I am async task 2") await asyncio.sleep(2) async def main (): asyncTask1 = asyncio.create_task(asynctask1()) asyncTask2 = asyncio.create_task(asynctask2()) await asyncTask1 await asyncTask2 print("ID of process running main program: {}".format(os.getpid())) print("Main thread name: {}".format(threading.current_thread().name)) t3 = threading.Thread(target=asyncio.run(main()), name='t3') t3.start() #Here its getting stucked and following print statement is not getting executed print("==================Printing after thread task started============================")

'' '

英語

Hi guys I don't get it why my code is getting stucked in the line where I am starting my thread. In this thread, I am willing to run these two asynchronous task but as soon as i am starting the thread as target (t3.start()), its getting block and followed up lines are not getting executed. After t3.start() line, print statement in the line is never getting executed. P.S. My Asynchronous task is working fine.

'''

import threading  import os from time import sleep import asyncio async def asynctask1():     print("Task 1 assigned to thread: {}".format(threading.current_thread().name))     print("ID of process running task 1: {}".format(os.getpid()))     while True:         print("I am async task 1")         await asyncio.sleep(2) async def asynctask2():     print("Task 2 assigned to thread: {}".format(threading.current_thread().name))     print("ID of process running task 2: {}".format(os.getpid()))     while True:         print("Hi I am async task 2")         await asyncio.sleep(2) async def main ():     asyncTask1 = asyncio.create_task(asynctask1())     asyncTask2 = asyncio.create_task(asynctask2())     await asyncTask1     await asyncTask2 print("ID of process running main program: {}".format(os.getpid())) print("Main thread name: {}".format(threading.current_thread().name)) t3 = threading.Thread(target=asyncio.run(main()), name='t3') t3.start() #Here its getting stucked and following print statement is not getting executed print("==================Printing after thread task started============================") 

'''

</div
        
   
   

回答リスト

0
 
vote

私はそれを取得してはいけない、括弧を与えず、そしてそれをパラメータとして越えてメインの非同期関数を呼び出すことになっているのか。

あなたがやろうとしていることを正確に理解しているわからないので、私は実際にあなたの質問に答えようとしませんが、あなたはこの声明が何をしているのか理解していますか?

<事前> <コード> t3 = threading.Thread(target=asyncio.run(main()), name='t3')

その文は

  • call main() を呼び出して、その後main()はそれを返します
  • コール asyncio.run( r <コード>ここで、 r はmain()によって返された値、その後実行後(...)戻り値
  • になります
  • target= を備えた新しい Thread インスタンスを作成します。ここで、 t は、asyncioによって返されたものであれです。実行(...)呼び出し。

関数について話をしたい場合(例えば、関数をスレッドの target として渡すために)次に関数の名前を書き込むだけです。関数の名前の後に括弧を置くときはいつでも、その関数を呼び出します。

 

I dont get it, how am i supposed to invoke the main async function without giving parenthesis and past it as parameter.

I'm not sure I understand exactly what you're trying to do, so I won't try to actually answer your question, but do you understand what this statement does?

t3 = threading.Thread(target=asyncio.run(main()), name='t3') 

That statement will

  • call main(), and then after main() returns it will
  • call asyncio.run(r) where r is whatever value was returned by main(), and then after run(...) returns it will
  • create a new Thread instance with target=t, where t is whatever was returned by the asyncio.run(...) call.

If you want to talk about a function, (e.g., to pass a function as the target of a thread) then just write the name of the function. Any time you put parentheses after the name of a function, that calls the function.

</div
 
 
     
     

関連する質問

0  非同期メソッドを実装するこの誤った方法はあります  ( Is this incorrect way to implement asynchronous method ) 
LANアプリケーションで動作するこのアプリケーションは、多くのクライアントからの接続を受け取ります 多くの状況では、通信しようとしているクライアントがデータを送信する前にすでに接続されていることを確認する必要がありますので、現在接続されているクライアントのリ...

4  IPROGRESS <T> Report(T)メソッドがUIスレッドをブロックするのはなぜですか?  ( Why is iprogresst reportt method blocking the ui thread ) 
以下のコードのメソッドProcess2()内の進捗状況の報告に問題があります。読み込まれたすべての行の後に進行状況バーをインクリメントしたいが、それ以降は応答しないようになります。 progress.report()行をコメントアウトした場合、それはもはやUI...

4  CONSOLEアプリケーションが終了後にまだメモリ内にある - 非同期Webサービス  ( C sharp console application still in memory after exit asynchronous web servic ) 
私は本当にc#と.netに新しい。私の上司は、Webサービスを使用してasyncronousコールバックを使用してタイマーを作成するように頼んだ。私はactaullyを作成しました、そしてそれが機能するようになったが、私がコンソールアプリケーションウィンドウを...

1  Oracle DBMS_ALERT WAITANY遅延  ( Oracle dbms alert waitany delay ) 
私は仕事をしています、それは他の仕事を提出するでしょう。 DBMS_ALERT.REGISTERを使用してNジョブを登録するようにPL / SQLプロシージャを設定しました。これらの各ジョブはDBMS_ALERT.SIGNALを送信します。私はシグナルの後すぐ...

2  非同期操作を実行するカスタムWindowsワークフローアクティビティ - Generic Serviceを使用してやり直す  ( Custom windows workflow activity that executes an asynchronous operation redon ) 
私は、カスタムWindowsワークフローファンドアクティビティを非同期的に開始し、ASYNCイベントが到着したときに起動する必要があります。 私が見つけたすべてのサンプル(例えばこれはKirk Evans に含まれています。これは、ほとんどの作業を行ってから...

3  非同期PHPコードの書き方  ( How to write async php code ) 
この疑似コードのようなものをいくつか持っています: <プレクラス= "LANG-NONE Prettyprint-Override"> <コード> Use CURL to get site1 into a variable Use CURL to get si...

3  receivefromasyncの例  ( Receivefromasync example ) 
receiveFromasyncはUDPに関して機能する例を持っていますか?サンプルコードが見つかりませんでした。私はいくつかのTCPサンプルを見つけることができますが、MSDNは「ReceiveFromAsyncメソッドは主にコネクションレスソケットにデー...

5  新しいファイルのディレクトリを見るには、選択/ poll / kqueue / keventを使用して  ( Using select poll kqueue kevent to watch a directory for new files ) 
私のアプリでは、新しいファイルのディレクトリを見る必要があります。トラフィックの量は非常に大きく、毎秒毎秒数百もの新しいファイルになる予定です。現在、この種のアイデアで忙しいループを使っています: <事前> <コード> while True: time.s...

20  非同期MySQLコネクタ  ( Asynchronous mysql connector ) 
CまたはC ++アプリケーション内で使用できるMySQLには非同期コネクタが存在しますか?私は title="Reactor Pattern">原子炉パターンを探しています。 boost.asio 。 [編集:]スレッド内の同期コネクタを実行することはオ...

10  DelphiでAsyncソケットプログラミングを行う慣用の方法は何ですか?  ( Whats the idiomatic way to do async socket programming in delphi ) 
Delphiでネットワークコードを書く通常の方法は何ですかWindowsスタイルの重複非同期ソケット入出力? これはこの質問についての私の事前の研究です: Indy コンポーネントは完全に同期しています。一方、SCKTCompユニットはWSAASYNCS...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有