quecpython 主线程while循环中调用的MainThread类Run,并在主线程中运行多个子线程Run进行业务运行。创建的定时器的触发也不需要等待主线程和子线程的业务结束,非阻塞。写个示例代码
时间: 2024-03-27 19:40:07 浏览: 108
好的,以下是一个简单的示例代码,展示了如何使用QuecPython创建一个定时器,同时在主线程中运行多个子线程进行业务运行,并且定时器触发不会阻塞主线程和子线程的执行:
```python
import utime
import _thread
class MainThread:
def __init__(self):
# 创建定时器,每隔1秒触发一次
self.timer = Timer(1, self.timer_callback)
self.timer.start()
def run(self):
# 主线程while循环
while True:
# 进行业务操作
print("MainThread is running")
utime.sleep(2)
def timer_callback(self):
# 定时器回调函数
print("Timer is triggered")
def sub_thread(thread_name):
# 子线程运行函数
while True:
# 进行业务操作
print("SubThread %s is running" % thread_name)
utime.sleep(3)
# 创建主线程对象
main_thread = MainThread()
# 启动多个子线程
for i in range(3):
_thread.start_new_thread(sub_thread, ("Thread-%d" % i,))
# 运行主线程
main_thread.run()
```
在上述示例代码中,我们创建了一个名为`MainThread`的类,其中包含了一个定时器和一个`run`方法,该方法中包含了主线程的业务逻辑,并且在循环中每隔2秒打印一次日志。
同时,我们使用`_thread`模块创建了3个子线程,每个子线程运行一个名为`sub_thread`的函数,该函数中包含了子线程的业务逻辑,并且在循环中每隔3秒打印一次日志。
最后,我们在代码的最后一行调用了`MainThread`对象的`run`方法,启动了主线程,并且定时器的回调函数每隔1秒被触发一次,但不会阻塞主线程和子线程的执行。
阅读全文
相关推荐
















资源下载链接为:
https://pan.quark.cn/s/d9ef5828b597
在Web开发中,将Canvas内容保存为图片或直接保存页面上的图片是一个常见需求。本文将介绍如何通过JavaScript实现这两种功能。
Canvas是HTML5提供的一个强大的绘图工具,允许开发者通过JavaScript动态绘制图形、文字和图片等。它支持复杂的图形操作,如变换、渐变和阴影等。要将Canvas内容保存为图片,可以使用toDataURL()方法。该方法会将Canvas内容转换为一个数据URL,通常是一个base64编码的PNG或JPEG图像。
以下是一个将Canvas内容保存为图片的函数示例:
在这个函数中,canvas参数是Canvas元素的DOM对象,name参数是保存的图片名称。通过调用toDataURL()方法,我们获取Canvas的图像数据,并创建一个元素。设置href属性为图像数据URL,download属性为文件名,然后模拟点击该链接,浏览器便会开始下载图片。
如果需要保存页面上的一张图片,可以直接操作
元素。假设页面中有一个
元素,其src属性指向要保存的图片,可以使用以下方法:
在这个函数中,img参数是
元素的DOM对象,name是保存的图片名称。通过将a.href设置为图片的src属性,然后触发点击事件,即可实现图片的下载。
需要注意的是,toDataURL()默认生成PNG格式的图片,但也可以通过指定MIME类型(如image/jpeg)来生成其他格式的图片。此外,由于同源策略的限制,如果Canvas绘制的内容来自跨域资源,可能无法正确转换为数据URL。同时,浏览器的安全策略可能会限制download属性的使用,例如在某些情况下不允许非用户交互式触发下载。
总之,JavaScript提供了简单的方法来将Canvas内容


