python主线程执行_在Django vi中的主线程中执行Python函数

我创建了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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postgis创建空间数据库(pgadmin4)

打开软件 看我之前的安装步骤的用户密码为postgres 点击save 查看是否具有空间数据 1.查看是否存在空间数据表 2.查看是否具有空间函数

Outlook最小到系统托盘

Outlook最小到系统托盘 默认状态下outlook最小化以后在任务栏上还占一个位置,又不常用,关了又不能实时接收到邮件,可以通过以下方法隐藏到系统托盘,解决方法如下: 如果你用得是Office2007: 1 打开注册表:开…

嵌入式linux的学习笔记-共享内存(六)

共享内存共享内存是可以被多个进程共享访问的一部分物理内存,如果多个进程都把一个内存区映射到自身的虚拟地址空间,则这些进程就可以直接访问该共享的内存区域,从而通过共享内存的方式实现多进程间的通讯,共享内存是进程间数据通讯的最快方法.共享内存的实现分为两步:1,创建共…

SQL Server 2012 安装

SQL Server 2012 安装 安装包在这里:https://pan.baidu.com/s/1_sgxN8P-pzj7uZeAR0VlKQ 提取码:mnvj 文件比较大,慢慢下载吧 下载好后是这样的: 双击打开,点击 setup.exe 安装: 选择“安装”&#xff0…

矢量数据导入数据库

打开数据导入工具 设置数据库链接 用户名和密码都是postgres 链接成功 arcgis10.3之前编码是gbk之后为utf-8 目前作者用的是10.2版本导出的数据 shp文件名和路径名必须为英文 添加数据 成功导入 追加表的属性要一致 查看导入数据 查看是否导入成功 创建两个字段

@qualifier注解_常见的 Spring 注解概览

点击上方 Java后端,选择 设为星标优质文章,及时送达从Java5.0开始,Java开始支持注解。Spring做为Java生态中的领军框架,从2.5版本后也开始支持注解。相比起之前使用xml来配置Spring框架,使用注解提供了更多的控制Sprin…

IOCP

select()或是其它异步方法不同的是,一个套接字[socket]与一个完成端口关联了起来,然后就可继续进行正常的Winsock操作了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。然后应用程序可以对核心层进行查询以…

经纬度转XY坐标-批量转换

excel存储的经纬度坐标,如何批量转换为XY平面坐标呢? 1.把度分秒转成度小数: 函数为:MID(B2,1,3)MID(B2,5,2)/60MID(B2,8,5)/3600 转换失效的需要补成两位数,如图 2.将文件另存为97-2003版本的excel,后缀…

【转载】C++读写ini配置文件GetPrivateProfileString()WritePrivateProfileString()

配置文件中经常用到ini文件&#xff0c;在VC中其函数分别为&#xff1a;#include <Windows.h> //wince,WMobile.ppc不支持这几个函数写入.ini文件&#xff1a;bool WritePrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileNa…

python代码设计测试用例_Python单元测试与测试用例简析

Python单元测试与测试用例简析 发布时间&#xff1a;2019-11-20 22:03 来源&#xff1a;互联网 当前栏目&#xff1a;web技术类 本文实例讲述了Python单元测试与测试用例。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 单元测试与测试用例 简介 测试用例是一组单元测…

数据库备份与恢复

备份 数据库的恢复 新建数据库邮件恢复

贪心算法精讲

一&#xff0e;贪心算法的基本概念 当一个问题具有最优子结构性质时&#xff0c;我们会想到用动态规划法去解它。但有时会有更简单有效的算法。我们来看一个找硬币的例子。假设有四种硬币&#xff0c;它们的面值分别为二角五分、一角、五分和一分。现在要找给某顾客六角三分钱。…

Arcgis将shp图投影坐标转换地理坐标,投影失败的问题

问题来源&#xff1a; 目的&#xff1a;shp图需要将投影坐标系去掉&#xff0c;即投影坐标系转换为地理坐标系 正常操作&#xff1a; 法1&#xff1a;使用Arcgis中工具箱-数据管理工具-投影与变换-要素-投影&#xff0c;&#xff1a;这个工具进行坐标转换 法2&#xff1a;转换…

c#调用.exe程序

using System.Diagnostics; //需要添加这行引用&#xff0c;关于线程的 private void button1_Click(object sender, EventArgs e){ string path "C:\Program Files\Tencent\QQ\QQ.exe"; //这个path就是要调用的exe程序的绝对路径 System.Diagnostics…

idea创建maven项目

如果没有配置这个参数&#xff0c;在maven生成骨架的时候将会非常慢&#xff0c;有时候直接卡住。archetypeCatalog表示插件使用的archetype元数据&#xff0c;不加这个参数时默认为remote&#xff0c;local&#xff0c;即中央仓库archetype元数据&#xff0c;由于中央仓库的ar…

Mapgis图转换为可导入软件的shp

可导入软件的矢量图格式如图&#xff0c;是shp文件&#xff0c;由6个文件构成&#xff1a; 而从Mapgis中导出的shp格式缺少文件&#xff0c;需要将其导入ArcGIS再次导出&#xff0c;补充相关文件。 另外&#xff0c;软件默认的坐标系是WGS-84&#xff0c;不过其他坐标系也可以…

mapgis格式转arcgis的shp格式

转shp 经过试验发现&#xff0c;1.投影坐标系直接转shp的时候不仅会出现位置不正确而且还会出现属性不正确&#xff0c;2.e00数据导入&#xff0c;arcmap2shp软件都会存在一些小问题&#xff0c;可能是作者操作有误导致出现一系列问题 以下介绍个人尝试后没有错误的方法 先将…

高斯投影坐标系为什么是六七八位数

坐标系分为地理坐标系和平面坐标系 地理坐标系 也叫“大地坐标系”&#xff0c;基于地球椭球体建立的坐标系&#xff0c;以经纬度表示&#xff0c; 单位是度分秒&#xff08;10824′34″&#xff09;&#xff0c;或度小数&#xff08;108.24356710&#xff09; 平面坐标系 …

五大算法之三--贪心算法

一、基本概念&#xff1a;所谓贪心算法是指&#xff0c;在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架&#xff0c;算法设计的关键…

神经网络与深度学习——TensorFlow2.0实战(笔记)(一)

第一章人工智能的起源和发展 人工智能是一门融合了计算机科学、数学、生物学、脑神经学、 心理学和哲学等多种学科的综合性学科。 弱人工智能 ( Artificial Narrow Intelligence , ANI) 拥有某种特定领域智能行为&#xff0c;替代人类从事某些活动。 强人工智能 ( Artificia…