`

python async 使用过程中可变参数,主线程,子线程问题

阅读更多

     1.here is no current event loop in thread 'Thread-1'

 

First, you're getting AssertionError: There is no current event loop in thread 'Thread-1'. because asyncio requires each thread in your program to have its own event loop, but it will only automatically create an event loop for you in the main thread. So if you call asyncio.get_event_loop once in the main thread it will automatically create a loop object and set it as the default for you, but if you call it again in a child thread, you'll get that error. Instead, you need to explicitly create/set the event loop when the thread starts:

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

Once you've done that, you should be able to use get_event_loop() in that specific thread.

It is possible to start an asyncio event loop in a subprocess started via multiprocessing:

import asyncio
from multiprocessing importProcess@asyncio.coroutine
def coro():print("hi")def worker():
    loop = asyncio.get_event_loop()
    loop.run_until_complete(coro())if __name__ =="__main__":
    p =Process(target=worker)
    p.start()
    p.join()

2.  TypeError: insert_data() takes 1 positional argument but 2 were given

    class HandlerAsync():
    async def insert_data(self, **kwargs):
        try:
            data = kwargs.get('kwargs')
            data1 = {"item": data.get('item'),
"event": data.get('event'),
"operator": data.get('operator'),
"timestamp": time.strftime("%Y%m%d%H%M%S")
                    }
            Log.objects.create(**data1)
        except Exception as e:
            print(e)

    async def handler(self, data):
        data = {"item": data.get('item'),
"event": data.get('event'),
"operator": data.get('operator'),
"timestamp": time.strftime("%Y%m%d%H%M%S")
                }
        await self.insert_data(data)

    def execute(self, data):
        try:
            loop = asyncio.new_event_loop()
            asyncio.set_event_loop(loop)
            loop.run_until_complete(self.handler(data))
            loop.close()
        except Exception as e:
            print(traceback.print_exc())

但是换一种参数写法,又正常
class HandlerAsync():

    async def insert_data(self, data):
        try:
            log_data = {"item": data.get('item'),
"event": data.get('event'),
"operator": data.get('operator'),
"timestamp": time.strftime("%Y%m%d%H%M%S")
                    }
            Log.objects.create(**log_data)
        except Exception as e:
            print(e)

    async def handler(self, data):
        await self.insert_data(data)

    def execute(self, data):
        try:
            loop = asyncio.new_event_loop()
            asyncio.set_event_loop(loop)
            loop.run_until_complete(self.handler(data))
            loop.close()
        except Exception as e:
            print(traceback.print_exc())


0
0
分享到:
评论

相关推荐

    子线程更新主线程数据

    在多线程编程中,"子线程更新主线程数据"是一个常见的需求,尤其是在UI界面交互和后台处理相结合的应用中。主线程通常负责用户界面的显示与交互,而子线程则用于执行耗时的任务,避免阻塞主线程,提供良好的用户体验...

    C# 主线程显示数据,子线程获取数据

    总结来说,C#中的异步委托是实现主线程显示数据、子线程获取数据的关键技术。通过合理运用异步编程,可以显著提升用户体验,避免UI卡顿,同时确保后台任务的顺利执行。理解并熟练掌握这种编程模式,对于开发高效且...

    python async with和async for的使用

    网上async with和async for的中文资料比较少,我把PEP 492中的官方陈述翻译一下。 异步上下文管理器”async with” 异步上下文管理器指的是在enter和exit方法处能够暂停执行的上下文管理器。 为了实现这样的功能,...

    Python3.5中async_await特性的实现.pdf

    在Python中,协程的演化过程经历了从生成器(Generator)到增强型生成器(Enhanced Generators),最终发展到了async/await。 在Python 2.2版本中,PEP 255提出了简单生成器的概念,生成器提供了一种方便的迭代器...

    Python3.5中async_await特性的实现.zip

    1. 异步I/O:在Python中,使用`asyncio.open_connection()`或`asyncio.sleep()`等函数可以实现异步I/O操作。例如,异步地从网络下载数据: ```python import asyncio async def fetch_data(url): reader, writer ...

    Ios子线程渲染Opengl demo

    然而,由于OpenGL渲染过程涉及到大量的计算和系统资源的使用,如果在主线程执行,可能会导致UI响应变慢,甚至出现卡顿现象。为了解决这个问题,开发者通常会选择在子线程进行OpenGL的渲染工作。 "Ios子线程渲染...

    子线程创建界面组件

    在编程领域,尤其是在GUI(图形用户界面)应用开发中,"子线程创建界面组件"是一个重要的主题。这个话题涉及到多线程技术以及如何在非主线程中安全地构建和更新用户界面。以下是对这个主题的详细解释: 1. **线程与...

    主线程等待子多线程(无结果返回)执行完成再继续执行

    在多线程编程中,有时我们需要确保主线程在所有子线程执行完毕后才继续执行。这通常是为了保证数据的一致性或者按照特定顺序完成任务。"主线程等待子多线程(无结果返回)执行完成再继续执行"这个主题就涉及到如何在...

    Python库 | meilisearch_python_async-0.14.0-py3-none-any.whl

    在Python中,异步编程允许程序在等待I/O操作(如网络通信或磁盘读写)完成时执行其他任务,而不是阻塞等待。这显著提高了应用的性能和响应速度,特别是对于网络密集型应用,如搜索引擎接口的调用。meilisearch_...

    Python中使用asyncio 封装文件读写

    ### Python中使用asyncio封装文件读写 #### 引言 在现代软件开发中,特别是在Web后端和服务端开发领域,非阻塞I/O技术变得越来越重要。这主要是因为随着互联网应用规模的增长,服务器需要处理成千上万个并发连接,...

    多线程显示进度条,子线程耗时10s,主线程在这10s中不停的刷新、显示,进度条界面

    6. **异常处理**:在子线程中,应处理可能的异常情况,确保即使子线程出错,也能正常通知主线程并更新界面,以向用户提供有意义的反馈。 7. **线程生命周期管理**:子线程启动后,需要确保其在任务完成后能够被正确...

    Python库 | python-logstash-async-1.6.4.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:python-logstash-async-1.6.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Java多线程–让主线程等待所有子线程执行完毕

    在主线程中,使用一个循环等待所有子线程调用`join()`,这样可以确保所有子线程都完成后再继续主线程。 2. 使用`CountDownLatch`:Java并发包`java.util.concurrent`中的`CountDownLatch`类可以用来同步多个线程。...

    Python-为Python的requests添加asyncawait语法支持

    本篇文章将深入探讨如何为`requests`添加`async/await`语法支持,以便在Python中实现高效的异步网络请求。 首先,我们要理解`async/await`语法在Python中的作用。`async`关键字用于定义一个协程(coroutine),而`...

    asyncapi-python:使用Asyncapi规范中的Broadcaster lib发布事件

    Python AsyncAPI 无需转换代码即可将规范转换为python代码的Python库。 AsyncAPI模式: 说明文件: 源代码: 主要特征 读取asyncapi规范并从中创建发布者和订阅者 支持使用数据类声明规格 提供创建订阅者的...

    Python-aiohttp一个用于asyncio和Python的异步HTTP客户端服务器

    Python的aiohttp库是为Python的异步IO框架asyncio设计的一个强大的工具,它集成了HTTP客户端和服务器的功能,使得在Python中处理网络请求变得高效且简洁。这个库允许开发者在同一时间处理多个网络连接,极大地提高了...

    Python从使用线程到使用async/await的深入讲解

    在Python中,`async`关键字用于定义一个协程函数,而`await`关键字用于在协程中暂停执行,等待某个异步操作完成。协程的主要优点是避免了线程间的上下文切换开销,提高了效率,同时也简化了错误处理和资源管理。 在...

    async_property:异步属性的Python装饰器

    您可以使用@async_property ,你会与刚@property ,但异步函数。 class Foo : @ async_property async def remote_value ( self ): return await get_remote_value () 现在,属性remote_value返回一个等待的...

    OC-主线程阻塞模拟效果:

    在iOS和macOS开发中,Objective-C(OC)是主要的编程语言之一,而主线程在应用程序中扮演着至关重要的角色。主线程负责处理用户交互、UI更新以及事件响应。当主线程被阻塞时,应用程序的性能和用户体验可能会显著...

Global site tag (gtag.js) - Google Analytics