PyQtのQThreadによるバックグラウンドスレッド

叫ぶ:

私はPyQtで書いたGUIを介して使用している無線とインターフェースするプログラムを持っています。無線の主な機能の1つは明らかにデータを送信することですが、これを継続的に行うには、書き込みをループする必要があるため、GUIがハングします。私はスレッディングを扱ったことがないので、これらのハングを取り除こうとしましたQCoreApplication.processEvents().

QThreadを使用してこれを修正する簡単な方法はありますか?PyQtでマルチスレッディングを実装する方法についてのチュートリアルを探しましたが、それらのほとんどはサーバーのセットアップを扱っており、必要以上に高度です。正直に言って、実行中にスレッドを更新する必要はまったくありません。スレッドを開始し、バックグラウンドで送信して停止するだけです。

aukaost:

スレッドを処理する3つの異なる簡単な方法を示す小さな例を作成しました。問題への適切なアプローチを見つけるのに役立つことを願っています。

import sys
import time

from PyQt5.QtCore import (QCoreApplication, QObject, QRunnable, QThread,
                          QThreadPool, pyqtSignal)


# Subclassing QThread
# http://qt-project.org/doc/latest/qthread.html
class AThread(QThread):

    def run(self):
        count = 0
        while count < 5:
            time.sleep(1)
            print("A Increasing")
            count += 1

# Subclassing QObject and using moveToThread
# http://blog.qt.digia.com/blog/2007/07/05/qthreads-no-longer-abstract
class SomeObject(QObject):

    finished = pyqtSignal()

    def long_running(self):
        count = 0
        while count < 5:
            time.sleep(1)
            print("B Increasing")
            count += 1
        self.finished.emit()

# Using a QRunnable
# http://qt-project.org/doc/latest/qthreadpool.html
# Note that a QRunnable isn't a subclass of QObject and therefore does
# not provide signals and slots.
class Runnable(QRunnable):

    def run(self):
        count = 0
        app = QCoreApplication.instance()
        while count < 5:
            print("C Increasing")
            time.sleep(1)
            count += 1
        app.quit()


def using_q_thread():
    app = QCoreApplication([])
    thread = AThread()
    thread.finished.connect(app.exit)
    thread.start()
    sys.exit(app.exec_())

def using_move_to_thread():
    app = QCoreApplication([])
    objThread = QThread()
    obj = SomeObject()
    obj.moveToThread(objThread)
    obj.finished.connect(objThread.quit)
    objThread.started.connect(obj.long_running)
    objThread.finished.connect(app.exit)
    objThread.start()
    sys.exit(app.exec_())

def using_q_runnable():
    app = QCoreApplication([])
    runnable = Runnable()
    QThreadPool.globalInstance().start(runnable)
    sys.exit(app.exec_())

if __name__ == "__main__":
    #using_q_thread()
    #using_move_to_thread()
    using_q_runnable()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

sleep_forがバックグラウンドスレッドをブロックしないようにする

分類Dev

UIスレッドは、バックグラウンドスレッドが処理を完了するまでどのように待機できますか?

分類Dev

Androidのバックグラウンドスレッド

分類Dev

ScanCallbackのバックグラウンドスレッド

分類Dev

処理中のバックグラウンドスレッド

分類Dev

ZeroMQバックグラウンドスレッドの作成

分類Dev

バックグラウンドスレッドでのKotlinrunBlocking

分類Dev

GAEPythonバックグラウンドスレッドの終了

分類Dev

Javaのバックグラウンドスレッド

分類Dev

SKPaymentQueueをバックグラウンドスレッドで実行するように強制する

分類Dev

PyQT QGraphicScene アイテムをバックグラウンド スレッドに移動

分類Dev

バックグラウンドとGCのエンドレススレッド

分類Dev

UWPのバックグラウンドスレッドからUIにアクセスする正しい方法

分類Dev

バックグラウンドスレッドのクラッシュ

分類Dev

GWTの起動時にバックグラウンドスレッドを起動する

分類Dev

Objectivecのバックグラウンドスレッドに関数を移動する

分類Dev

人生の終わりにProgressBarを閉じるバックグラウンドスレッド

分類Dev

バックグラウンドスレッドでNSBlockOperationの直後にメインスレッドでブロックを実行する

分類Dev

画像をレンダリングするためのバックグラウンドスレッドのXcodeUI

分類Dev

バックグラウンドスレッドにドキュメントを正しくロードする

分類Dev

Androidはアクティビティを終了するときにバックグラウンドスレッドをどのように処理しますか?

分類Dev

iOSのバックグラウンドスレッドにテキストを描画するにはどうすればよいですか?

分類Dev

SwiftによるWKWebViewコンテンツの更新がバックグラウンドスレッドで失敗しました

分類Dev

IntelliJにバックグラウンド作業に複数のスレッドを使用させるにはどうすればよいですか?

分類Dev

非同期メソッドがシングルスレッドの場合、バックグラウンドでどのように実行できますか?

分類Dev

DispatchQueueの使用中にSwiftでメインスレッドから実行中のバックグラウンドスレッドの実行を停止する方法

分類Dev

x秒ごとにバックグラウンドスレッドでメソッドを実行する

分類Dev

バックグラウンドスレッドからのGUIアクセスに関する基本的なスレッド

分類Dev

バックグラウンドスレッドおよびスレッド内のスレッドからのUIの更新

Related 関連記事

  1. 1

    sleep_forがバックグラウンドスレッドをブロックしないようにする

  2. 2

    UIスレッドは、バックグラウンドスレッドが処理を完了するまでどのように待機できますか?

  3. 3

    Androidのバックグラウンドスレッド

  4. 4

    ScanCallbackのバックグラウンドスレッド

  5. 5

    処理中のバックグラウンドスレッド

  6. 6

    ZeroMQバックグラウンドスレッドの作成

  7. 7

    バックグラウンドスレッドでのKotlinrunBlocking

  8. 8

    GAEPythonバックグラウンドスレッドの終了

  9. 9

    Javaのバックグラウンドスレッド

  10. 10

    SKPaymentQueueをバックグラウンドスレッドで実行するように強制する

  11. 11

    PyQT QGraphicScene アイテムをバックグラウンド スレッドに移動

  12. 12

    バックグラウンドとGCのエンドレススレッド

  13. 13

    UWPのバックグラウンドスレッドからUIにアクセスする正しい方法

  14. 14

    バックグラウンドスレッドのクラッシュ

  15. 15

    GWTの起動時にバックグラウンドスレッドを起動する

  16. 16

    Objectivecのバックグラウンドスレッドに関数を移動する

  17. 17

    人生の終わりにProgressBarを閉じるバックグラウンドスレッド

  18. 18

    バックグラウンドスレッドでNSBlockOperationの直後にメインスレッドでブロックを実行する

  19. 19

    画像をレンダリングするためのバックグラウンドスレッドのXcodeUI

  20. 20

    バックグラウンドスレッドにドキュメントを正しくロードする

  21. 21

    Androidはアクティビティを終了するときにバックグラウンドスレッドをどのように処理しますか?

  22. 22

    iOSのバックグラウンドスレッドにテキストを描画するにはどうすればよいですか?

  23. 23

    SwiftによるWKWebViewコンテンツの更新がバックグラウンドスレッドで失敗しました

  24. 24

    IntelliJにバックグラウンド作業に複数のスレッドを使用させるにはどうすればよいですか?

  25. 25

    非同期メソッドがシングルスレッドの場合、バックグラウンドでどのように実行できますか?

  26. 26

    DispatchQueueの使用中にSwiftでメインスレッドから実行中のバックグラウンドスレッドの実行を停止する方法

  27. 27

    x秒ごとにバックグラウンドスレッドでメソッドを実行する

  28. 28

    バックグラウンドスレッドからのGUIアクセスに関する基本的なスレッド

  29. 29

    バックグラウンドスレッドおよびスレッド内のスレッドからのUIの更新

ホットタグ

アーカイブ