我创建了Django视图“graph”,目的是显示从matplotlib.pyplot模块。我编写了我的函数plot\u bubbles(返回amatplotlib.figure.figure对象)在脚本数据中_分析.py导入到视图.py脚本。在

Tkinter只能在主线程上运行,我的网页在我第一次请求时按预期工作,但在刷新或再次请求时它不显示图像。我的理解是,当视图再次被请求时,Django在一个新线程上操作代码。在from django.http import HttpResponse

from . import data_analysis

import Queue

import threading

q = Queue.Queue()

def graph(request):

parties = ["Conservative Party", "Labour Party", "Green Party", "UKIP"]

def from_other_thread(graph_function):

q.put(graph_function)

def main_thread_execute():

callback = q.get()

fig = callback

return fig

def grapher(arguments, area_variable):

data_analysis.plt.close('all')

from_other_thread(data_analysis.plot_bubbles(arguments, area_variable))

t = threading.Thread(target = grapher, args=(parties, data_analysis.all_data['2015 Pay']))

t.start()

t.join()

fig = main_thread_execute()

response = HttpResponse(content_type='image/png')

fig.savefig(response, format='png')

return response

其目的是在主线程中运行函数,以便Tkinter可以实际工作并创建图像我希望每次请求url时都创建图像,因为我将允许用户通过表单选择他想要可视化的变量,并将它们作为plot_bubbles函数的参数传递。在

我是django的初学者,从未在代码中使用过多线程,感谢您阅读本文。如有任何关于您的解决方案的解释,我们将不胜感激。在

编辑

不一定需要穿线。问题源于我的数据分析脚本生成绘图的方式。尤其是方法调用的代码matplotlib.pyplot.subplothttp://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.subplots生成一个带有4个轴对象的图形

^{pr2}$

这似乎导致Tkinter无法在主循环上运行,我还没有完全理解原因。这就是代码现在的样子#!/usr/bin/python

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

import pandas as pd

import numpy as np

from pandas import Series, DataFrame

from pylab import figure, axes, plot, title, subplots

import statsmodels.api as sm

from sqlalchemy import create_engine

from matplotlib.backends.backend_agg import FigureCanvasAgg

import matplotlib

# Load data from database into dataframe

engine = create_engine("postgresql://user_name:password@localhost:5432/brexit")

all_data = pd.read_sql('''SELECT * FROM records;''', engine, index_col='Borough')

# Bubble Plot function creation

colors = np.random.rand(len(all_data.index))

area = []

def plot_bubbles(arguments, area_variable, space=0):

ah = iter(arguments)

eh = iter(arguments)

ih = iter(arguments)

kh = iter(arguments)

th = iter(arguments)

zh = iter(arguments)

mh = iter(arguments)

fig = figure(figsize=(30, 25))

ax1 = fig.add_subplot(2,2,1)

ax2 = fig.add_subplot(2,2,2)

ax3 = fig.add_subplot(2,2,3)

ax4 = fig.add_subplot(2,2,4)

collection = [ax1, ax2, ax3, ax4]

for x in area_variable:

#want the bubbles to have an average area of 40, add a factor to increase the variability in size

factor = ((x-area_variable.mean())**2/400)

area.append(factor*x*(40/area_variable.mean()))

for ax in collection:

orient = all_data[ah.next()]

ax.set_ylabel('Leave %')

ax.set_xlim([max(0, all_data[zh.next()].min()-all_data[mh.next()].min()/3),

all_data[ih.next()].max()+all_data[th.next()].max()/7])

results = sm.OLS(all_data['Leave votes'], sm.add_constant(orient)).fit()

X_plot = np.linspace(orient.min()-0.05, orient.max(), 100)

ax.plot(X_plot, X_plot*results.params[1] + results.params[0], )

for label, ori, leave in zip(all_data.index, orient, all_data['Leave votes']):

ax.annotate(label, xy=(ori, leave), xytext=(ori, leave+0.05),

arrowprops={'facecolor':'black', 'connectionstyle':'arc3,rad=0.3', 'arrowstyle':'simple'})

ax.scatter(orient, all_data['Leave votes'], s=area, c=colors, alpha=0.6)

ax.set_title(kh.next())

fig.subplots_adjust(hspace=space, wspace=space)

return fig

随着图形和轴创建方式的改变,问题得到了解决。如果有人能解释一下为什么会这样,那就很有趣了。在

python主线程执行_在Django vi中的主线程中执行Python函数相关推荐

  1. asp.net python 开发web 效率_【Django】Python web开发:几个模板系统的性能对比(转)...

    http://blog.chedushi.com/archives/910 结论: 点评一下吧.django就是个渣,不多废话了.webpy的代码很简洁,可惜速度太慢了.bottle看起来快一点,不过 ...

  2. python 调用rpc服务_在Django项目中对Python函数进行RPC调用的优雅方式

    我正在尝试创建一个django网站来访问MySQL数据库中的数据.其目的是在Dojo(javascript)中创建一个UI.另外,我希望django后端也提供webservices(RPC for p ...

  3. python dict批量选择_这一定是你见过最全面的python重点

    由于总结了太多的东西,所以篇幅有点长,这也是我"缝缝补补"总结了好久的东西. Py2 VS Py3 print成为了函数,python2是关键字 不再有unicode对象,默认st ...

  4. 调用python接口并画图_【PySpark源码解析】教你用Python调用高效Scala接口

    点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 机器之心专栏 作者:汇量科技-陈绪 众所周知,Spark 框架主要是由 Scala 语言实现,同时也包含少量 Java 代码.Spa ...

  5. animation 先执行一次 在持续执行_这一次,彻底弄懂 JavaScript 执行机制

    本文来源:ssssyokihttps://juejin.im/post/6844903512845860872 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇 ...

  6. 青少年编程python一级真题_青少年编程能力等级测评试卷二及答案 Python编程(一级)...

    青少年编程能力等级测评试卷 Python编程(一级) (考试时间90分钟,满分100分) 一.单项选择题(共20题,每题2.5分,共50分) 1. 运行下方代码段,输出是6,则输入的可能是( C ). ...

  7. python面试自我介绍_如何拿到半数面试公司Offer——我的Python求职之路

    短短的一星期多一些,面试了9家公司,拿到5份Offer,可能是因为我所面试的公司都是些创业性的公司吧,不过还是感触良多,因为学习Python的时间还很短,没想到还算比较容易的找到了工作,就把这些天的面 ...

  8. 运维学python用不上_数读 | 为什么运维朋友们都需要学Python?

    运维人员需不需要学开发?需不需要学Python?PythonN和Shell有什么区别?天天问这种好水的问题,我实在受不了,决定帮大家扫扫盲. 现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能, ...

  9. python调用vb文件_【转载】利用VB生成APDL文件 和Python文件的方法

    转载 利用VB生成APDL文件 和Python文件的方法 作者:李涛 欢迎关注:CAE技术分享 专注于CAE技术的分享和讨论. 1. 概述 Visual Basic作为一种可视化程序设计语言,应用相对 ...

最新文章

  1. [No000077]打造自己的Eclipse
  2. bug最后汇总-2018/08/03
  3. centos6mysql编译安装_centos6编译安装MySQL
  4. Yann LeCun, Geoffrey E. Hinton, and Yoshua Bengio
  5. [推荐]大量 Blazor 学习资源(三)
  6. 番石榴的EventBus –简单的发布者/订阅者
  7. 抓取各个浏览器引擎关键字,,百度学术关键字
  8. (原创)面向对象的系统对接接口编写。第4篇
  9. AD16修改规则加宽电源线与地线
  10. 关于windows server与SQL server用户数的解释 (转)
  11. 一个人学习3D视觉太痛苦了怎么办?
  12. 如何去除PDF的水印
  13. Axure RP9教程 入门讲解
  14. Linksys e3200初试tomato系统
  15. ESP32-C3入门教程 IoT篇⑤——阿里云 物联网平台 EspAliYun RGB LED 实战之设备生产流程
  16. 5.23 通过自定义筛选查找指定城市的指定工作人员 [原创Excel教程]
  17. python代码手机壁纸_Python制作微信好友背景墙教程(附完整代码)
  18. ICV:中国智能驾驶领跑全球,2026年L2级汽车销量将占全球44%
  19. 5.3 10篇美食类小红书爆文拆解【玩赚小红书】
  20. 离散数学:常用的数学符号

热门文章

  1. 【移植驱动到Linux3.4.2内核之一】移植DM9000C网卡驱动
  2. zookeeper 安装和使用
  3. 小程序·云开发实战 - 体重记录小程序
  4. SecureCRT SSH 语法高亮
  5. iOS本地推送UILocalNotification
  6. c# 相对路径的一些文献
  7. 非常实用的Asp.net常用的51个代码
  8. 【数据结构与算法】字符串匹配 BF算法 RK算法
  9. [Leedcode][JAVA][第355题][设计推特][面向对象][哈希表][链表][优先队列]
  10. 【模板】最新空web.xml模板