Tartiflette is a GraphQL Server implementation built with Python 3.6+.
Summary
Read this blogpost about our motivationsTL; DRWe reached the limits of Graphene, we wanted to build something which met certain requirements:
The first milestone is behind us, we are now on the road to the milestone 2.
DNA
Discover Tartiflette with our fabulous tutorial on https://tartiflette.io/docs/tutorial/getting-started
import asyncio
from tartiflette import Resolver, create_engine
@Resolver("Query.hello")
async def resolver_hello(parent, args, ctx, info):
return "hello " + args["name"]
async def run():
engine = await create_engine(
"""
type Query {
hello(name: String): String
}
"""
)
result = await engine.execute(
query='query { hello(name: "Chuck") }'
)
print(result)
# {'data': {'hello': 'hello Chuck'}}
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
More details on the API Documentation
Tartiflette is available on pypi.org.
While the project depends on libgraphqlparser,wheels are provided since version 1.4.0, ensuring that no system dependency is required.
To install the library:
pip install tartiflette
If you use a platform incompatible with the provided wheels, you'll need to install cmake
to build libgraphqlparser
in order to install the library.
macOS
brew install cmake
Debian/Ubuntu
apt-get install cmake
tartiflette
library itself is transport agnostic, but to simplify integration with existing HTTP servers, twodifferent libraries are available:
aiohttp
As you may know, the documentation is hosted on https://tartiflette.io. This fabulous website is built thanks to another amazing tool, docusaurus.
The content of the documentation is hosted in this repository, to be as close as possible to the code. You will find everything you need/want in the folder /docs
.
We built a docker image for the documentation (tartiflette/tartiflette.io on docker hub), which allow us to provide you an easy way to launch the documentation locally, without installing a specific version of node.
prerequisite:
make run-docs
Every change you will make in the /docs
folder will be automatically hot reloaded.
问题内容: 假设我们有很多链接可供下载,并且每个链接可能花费不同的时间来下载。而且我只能使用最多3个连接进行下载。现在,我想确保使用asyncio有效地做到这一点。 这是我要实现的目标:在任何时间点,请尝试确保至少运行3个下载。 数字代表下载链接,连字符代表等待下载。 这是我现在正在使用的代码 输出是预期的: 但是这是我的问题: 目前,我只是在等待9秒钟以使主要功能保持运行状态,直到下载完成。在退
问题内容: 我已经使用Python asyncio和aiohttp成功构建了一个RESTful微服务,该服务可侦听POST事件以收集来自各种供料器的实时事件。 然后,它构建一个内存结构,以将事件的最后24小时缓存在嵌套的defaultdict / deque结构中。 现在,我想定期检查该结构到磁盘的位置,最好使用pickle。 由于内存结构可以大于100MB,因此我希望避免在检查点结构所需的时间上
问题内容: 我想使用asyncio调用loop.run_in_executor在Executor中启动一个阻塞函数,然后在以后取消它,但这似乎对我不起作用。 这是代码: 我希望上面的代码仅允许阻塞函数输出: 然后查看非阻塞函数的输出。但是,即使我取消了,阻碍性的未来仍在继续。 可能吗?还有其他方法吗? 谢谢 问题答案: 在这种情况下,一旦它真正开始运行,就无法取消它,因为您依赖的行为,并且它的文档
问题内容: 我的阻塞功能很少,我无法更改(某些我无法控制的内部库。与一个或多个网络服务进行对话)。如何将其用作异步?例如,我将不执行以下操作。 这将是低效的,因为我在等待第一个输入的同时可以调用第二个输入。我如何包装它们以便它们可与asyncio一起使用(即new ,语法)? 让我们假设函数是可重入的。也就是说,如果已经处理过先前的事件,则可以再次调用。 更新资料 使用可重用的装饰器扩展答案。单击
问题内容: 在Windows上的Python 3.4下,我需要使用Python 3.4中引入的asyncio框架流式传输子进程写入stdout / stderr的数据,即在发生时接收其输出。之后,我还必须确定程序的退出代码。我怎样才能做到这一点? 问题答案: 到目前为止,我想出的解决方案使用SubprocessProtocol来接收子进程的输出,并使用关联的传输来获取该进程的退出代码。我不知道这是
问题内容: 我想使用asyncio协程而不是多线程来重新实现我的代码。 server.py client.py 我知道有一些适当的异步网络库可以做到这一点。但是我只想在这种情况下使用asyncio核心库,以便对其有更好的了解。 仅在处理客户端定义之前添加async关键字真是太好了……这里的一段代码似乎有效,但是我仍然对实现感到困惑。 asyncio_server.py 如何以最佳方式和使用异步aw
问题内容: 如何创建使芹菜任务看起来像的包装器?还是有更好的方法与Celery集成? Celery的创建者@asksol这样说: 将Celery用作异步I / O框架之上的分布式层是很常见的(提示:将CPU绑定的任务路由到prefork worker意味着它们不会阻塞事件循环)。 但是我找不到任何专门针对框架的代码示例。 问题答案: 如官方网站上所述,这可以通过Celery 5.0版实现: htt
问题内容: 当我转到页面时,第一个示例是hello world程序。当我在python上运行它时,我看不出与正常的任何区别, 有人可以告诉我区别并举一个简单的例子吗? 我故意将时间从1秒增加到5秒,希望看到一些特别的东西,但我没有。 问题答案: 您不会看到什么特别的东西,因为您的代码中没有太多异步工作。但是,主要区别在于它是阻塞的,并且是非阻塞的。 当被调用时,它会阻止脚本的整个执行,它会被搁置,