Aceminin python sorulari

Başlatan z, 25 Nisan 2020, 11:30:48

muhittin_kaplan

Alıntı yapılan: startirrek704250 - 04 Mayıs 2020, 22:17:13bilgisayarda çalıştırdığımız python ile arduino veya arm boardları nasıl haberleştireceğiz. bununla ilgili bir rehber var mı acaba.
çok teşekkürler.
PC de hangi protu kullanmak istiyorsunuz, USB SERİ PARALEL ona göre python kütüphanesi mevcut. İsterseniz yeni bir konu açınız.

z

İşimi gördü teşekkürler.

Saçma gelecek içimde şöyle bir korku var.

Threadi oluşturup çalıştırıyoruz. Ardından yeniden oluşturuyoruz ve çalıştırıyoruz.

Bir önce oluşturduğumuz threadi öldürmek gibi bir işlem yokmu? Yani hafızada bu işlemler birikim yapmaz mı?

Çünkü binlerce kez thread oluşturup çalıştıracağım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

Hocam Emin değilim (Araştırıyorum) ama garbage collection işi halleder sanırım. (Kullanılmayan nesnelerin hafızadan atılmasını sağlayan bir sistem gibi düşünebilirsiniz)

muhittin_kaplan

hocam thread sınıfındaki aşağıdaki satırları
    def __init__(self,parametre):
        QThread.__init__(self):

aşağıdaki satırlar ile (parent e dikkat)
def __init__(self,parent,parametre):
QThread.__init__(self,parent)

ve

main class daki aşağıdaki satırı
self.thread=myThreadClassFile.MyThreadClass(parametre=self.param)

aşağıdaki satırla değiştiriniz.
self.thread=myThreadClassFile.MyThreadClass(self,parametre=self.param)

thread ı oluşturuken ebeveyn olarak birşey vermemişiz. vermek doğru kullanımdır.
main Class ı ebeveyn olarak thread a parametre geçiyoruz. Self her sınıfta o sınıfı temsil eder (c# this gibi,vb de Me gibi)

mufitsozen

#49
Alıntı yapılan: muhittin_kaplan - 05 Mayıs 2020, 18:49:29Hocam Emin değilim (Araştırıyorum) ama garbage collection işi halleder sanırım. (Kullanılmayan nesnelerin hafızadan atılmasını sağlayan bir sistem gibi düşünebilirsiniz)


Normal olarak bir thread yarattiginizda onunla haberlesmek icin birde Queue tanimlarsiniz ve bir parametre olarak verirsiniz.

Bundan sonra o threadle haberlesmek isteyen herkes bu queue'yu kullanir. Thread icinde ise bu queudan komutlari alip isleyen bolum 'bitir' komutunu alinca thread'i sonlandirilir.

(pythonda hersey global oldugu icin ve butun threadler ayni global'leri paylasirlar ve bazi tecrubesiz programcilar haberlesme icin boyle bir yontemi secebilirler ama bu dogru bir haberlesme sekli degildir, kullanimda cok problemlere yol acar.)
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

muhittin_kaplan

@mufitsozen Hocam, Thread ı bitince tekrar , bitince tekrar parametreli çağıracak. QThread çalıştırma anında parametre geçemiyoruz. ilk yaptığımda sınıfın constructor una parametre geçtim. Burada her çalıştırmada Thread ı yeniden oluşturmak gerekiyor dogal olarak.Bu bir sorun olabilir. onun yerine bir fonksiyon oluşturup parametreyi oraya geçeceğim.

muhittin_kaplan

import sys
from PyQt5 import QtWidgets,QtGui
from PyQt5.QtWidgets import QAction,QMessageBox,QFileDialog
from PyQt5.QtCore import pyqtSlot
from untitled import Ui_Dialog  # importing our generated file
import myThreadClassFile

class mywindow(QtWidgets.QDialog):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect(self.threadBaslat)
        self.param=1

        self.thread=myThreadClassFile.MyThreadClass(self)
        self.thread.getValuFromMain(self.param)
        self.thread.threadBittiSignal.connect(self.threadBittiMainFunction)

    def threadBaslat(self):
        if (self.thread.isRunning()==False):
            self.thread.getValuFromMain(self.param)
            self.thread.start()
            self.param = self.param + 1


    @pyqtSlot(bool)
    def threadBittiMainFunction(self,bittiSinyal):
        self.ui.listWidget.addItem("Thread Bitti = "+str(bittiSinyal))


app = QtWidgets.QApplication([])
application = mywindow()
application.show()
sys.exit(app.exec())
------------------------------------------------------------------------------------------------

#!/usr/bin/python3

from PyQt5.QtCore import QThread, pyqtSignal
import time
from datetime import datetime

class MyThreadClass(QThread):
    threadBittiSignal = pyqtSignal(bool)

    def __init__(self,parent):

        QThread.__init__(self,parent)
        print("thread sınıfı oluşturuldu")

    # run method gets called when we start the thread
    def getValuFromMain(self,parameterFromMain):
        self.localParametre=parameterFromMain

    def run(self):
        if (self.localParametre==1):
            for i in range (1000):
                print("Yuzkez parametre=1")
                time.sleep(0.01)
            self.threadBittiSignal.emit(True)
        elif(self.localParametre==2):
            for i in range (1000):
                print("Yuzkez parametre=2")
                time.sleep(0.01)
            self.threadBittiSignal.emit(True)
        else:
            for i in range (1000):
                print("Yuzkez parametre=None")
                time.sleep(0.01)
            self.threadBittiSignal.emit(True)

-----------------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.listWidget = QtWidgets.QListWidget(Dialog)
        self.listWidget.setGeometry(QtCore.QRect(10, 10, 381, 192))
        self.listWidget.setObjectName("listWidget")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(229, 210, 161, 23))
        self.pushButton.setObjectName("pushButton")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.pushButton.setText(_translate("Dialog", "Thread Start"))

muhittin_kaplan

@mufitsozen Hocam QQUE varmış QT de ama PyQT de bir örneğine denk gelmedim.

mufitsozen

#53
Alıntı yapılan: muhittin_kaplan - 05 Mayıs 2020, 21:46:27@mufitsozen Hocam QQUE varmış QT de ama PyQT de bir örneğine denk gelmedim.

Python standard lib'de var.

Python Essential Reference
Fourth Edition
Copyright © 2009 by Pearson Education, Inc.


from queue import Queue

Programming with Threads
Although it is possible to write very traditional multithreaded programs in Python using
various combinations of locks and synchronization primitives, there is one style of pro-
gramming that is recommended over all others—and that's to try and organize multi-
threaded programs as a collection of independent tasks that communicate through
message queues.This is described in the next section (the queue module) along with
an example.
queue , Queue
The queue module (named Queue in Python 2) implements various multiproducer,
multiconsumer queues that can be used to safely exchange information between multi-
ple threads of execution.
The queue module defines three different queue classes:
Queue([ maxsize ])
Creates a FIFO (first-in first-out) queue. maxsize is the maximum number of items
that can be placed in the queue. If maxsize omitted or 0, the queue size is infinite.
LifoQueue([ maxsize ])
Creates a LIFO (last-in, first-out) queue (also known as a stack.
..........
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

z

Alıntı yapılan: mufitsozen - 05 Mayıs 2020, 19:22:06(pythonda hersey global oldugu icin ve butun threadler ayni global'leri paylasirlar ve bazi tecrubesiz programcilar haberlesme icin boyle bir yontemi secebilirler ama bu dogru bir haberlesme sekli degildir, kullanimda cok problemlere yol acar.)

Mesela nasıl problemler olur?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Ama bir de şöyle durum var;

Mevcut yapı benim işime geldi. Thread oluşturulurken parametre geliyor ardından thread çalıştırılıyor.

Yeni bir görev geleceği zaman parametresi geliyor ve yeni den thread çalıştırılıyor.

Şimdi ana program ile thread arasında bir veri yolu oluştulunca thread veri geldimi diye polling mi yapacak?

Ana program tarafında sorun yok ama thread bu şekilde görev geldimi geldimi diye döngüye girerecekse işlemciyi yormayacak mı?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

#56
son attığım örnekte sadece 1tek thread oluşturuyorsun hocam. Dolayısıyla MEM de sadece tek threadın oluşuyor.
diğerinde her seferinde başka thread oluşturuyor. MEM de çok fazla thread bekleyebilir. garbage collector aha bu çöp atayım şunu diyene kadar.
Ben olsam son attığım örneği kullanırdım.
QUE @mufitsozen hocanın söylediği gibi Core Python da mevcut ama ben PyQT nin nesneleri ile corePython nesnelerini kullanmak istemiyorum.

bocek

@z hocam projenizde işinize yarar mı bilmiyorum ama python'da telegram modülü de var. Telegram üzerinden takip ve/veya kumanda edebiliyorsunuz programınızı. Madem Python'a bulaştınız bilginiz olsun diye söylüyorum.
1 ya da 0. işte 'bit'ün mesele..

z

Telegramla hiç ilgilenmedim ama program istendiği gibi çalıştıktan sonra internet üzerinden de kumanda edilebilsin ya da en azından ekran görüntüsüne internet üzerinden ulaşılabilsin isterim.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Raspi icin python ile gelistirilen uygulama kolayca android telefonlarda da calistirilabilir mi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com