Python-如何同时运行两个依赖功能?

时间:2018-07-02 03:32:07

标签: python raspberry-pi

我有两个功能,一个运行一个数字递增一个,另一个运行每5秒捕获一次运行第一个函数的数字,因此当我捕获第一个数字为0时,第二个为10 ,下一个是15,依此类推...这是模拟第一个传感器功能。我的代码如下:

import time
import threading
from threading import Thread

def numero(i=0):
while True:
    i = i + 1
    time.sleep(1)
    #print i

def capturar():
while True:
    posicion = numero()
    time.sleep(5)
    print posicion


if __name__ == '__main__':
    Thread(target = capturar()).start()
    Thread(target = numero()).start()

运行此代码时,它保留在第一个函数中,如何才能正确运行此代码并每5秒获取一系列数字的捕获?

2 个答案:

答案 0 :(得分:1)

您的代码中有几个错误:

  • undefined不在it(‘check component is a button’,() => { const wrapper = shallow(FormSearch); let mockCategories = { // mock category data } wrapper.$parent = { categories: mockCategories } expect(wrapper.contains(‘button’)).toBe(true); }); 的范围内
  • 您执行icapturar而不是将函数本身交给capturar
  • 正如马特·克拉克(Matt Clark)所说,您从numero呼叫Thread,该电话再也不会返回,因此numero甚至无法进行一个完整的循环。

要帮助第一个,最简单的解决方案是将函数包装到一个类中,并将capturar设置为实例状态(作为属性)。第二个仅要求您删除多余的括号。第三个问题由第一个解决,因为不再需要函数调用来获取计数器状态。

这应该做您想要的:

capturar

答案 1 :(得分:0)

谢谢阿玛丹(Amadan),您所分享的声音效果很好,但是当我尝试将其拉入真实传感器(GPS)时,我得到的只是“ 0”

import gps
import itertools
import json
import os
import portdetect
import time
import serial
from threading import Thread

(puerto1, puerto2) = portdetect.detectar_puerto()
print puerto1, puerto2
port = serial.Serial(puerto1, 115200, timeout=1)

os.system('sudo systemctl stop gpsd.socket')
time.sleep(2)
os.system('sudo systemctl disable gpsd.socket')
time.sleep(2)
comando = 'sudo gpsd ' + puerto2 + ' -F /var/run/gpsd.sock'
os.system(str(comando))
#print str(comando)

# Listen on port 2947 (gpsd) of localhost
session = gps.gps("localhost", "2947")
session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE)

class Contador:
    def __init__(self, comienzo = 0):
        self.raw_datos = comienzo

    def leergps(self):
        while True:
            try:
                report = session.next()
                # Wait for a 'TPV' report and display the current time
                # To see all report data, uncomment the line below
                # print report
                if report['class'] == 'TPV':
                    if hasattr(report, 'time') or hasattr(report, 'lat') or hasattr(report, 'lon') or hasattr(report,
                                                                                                              'speed'):
                        datos = [report.time, report.lat, report.lon, report.speed]
                        clave = ['tiempo', 'lat', 'lon', 'speed']
                        diccionario = dict(itertools.izip(clave, datos))
                        self.raw_datos = (json.dumps(diccionario))
                    # print raw_datos
                    return self.raw_datos
                else:
                    return report['class']
            except:
                print "Error de coordenadas"

    def capturar(self):
        while True:
            posicion = self.raw_datos
            time.sleep(5)
            print posicion


if __name__ == '__main__':
    c = Contador()
    Thread(target = c.capturar).start()
    Thread(target = c.leergps()).start()

我仅尝试提取“每5秒获得的原始数据,但我没有实现”