我正在尝试编写一个扫描文件夹的python脚本并收集更新的SQL脚本,然后自动为SQL脚本提取数据.在代码中,while循环是扫描新的SQL文件,并发送到数据拉取功能.我无法理解如何使用while循环创建动态队列,但也有多进程来运行队列中的任务.
下面的代码有一个问题,即while循环迭代在移动到下一次迭代之前将在长作业上工作并收集其他作业以填充空闲处理器.
更新:
感谢@pbacterio捕获错误,现在错误消息消失了.更改代码后,python代码可以在一次迭代中获取所有作业脚本,并将脚本分发到四个处理器.但是,如果要进行下一次迭代,扫描并提交新添加的作业脚本,它将会很长时间.知道如何重建代码吗?
我终于找到了解决方案,请参阅下面的答案.事实证明我正在寻找的是
the_queue = Queue()
the_pool = Pool(4,worker_main,(the_queue,))
对于那些偶然发现类似想法的人来说,以下是这个自动化脚本的整个架构,它将共享驱动器转换为"用于SQL拉动的服务器"或任何其他作业队列"服务器".
一个.python脚本auto_data_pull.py如答案所示.您需要添加自己的工作职能.
湾 一个'批处理脚本',其中包括:
启动C:\ Anaconda2\python.exe C:\ Users\bin\auto_data_pull.py
C.添加由启动计算机触发的任务,运行"批处理脚本"即可.有用.
Python代码:
from glob import glob
import os, time
import sys
import CSV
import re
import subprocess
import pandas as PD
import pypyodbc
from multiprocessing import Process, Queue, current_process, freeze_support
#
# Function run by worker processes
#
def worker(input, output):
for func, args in iter(input.get, 'STOP'):
result = compute(func, args)
output.put(result)
#
# Function used to compute result …Run Code Online (Sandbox Code Playgroud) 我想根据testresult.csv具有以下格式的文件绘制RESULT vs TIME ,我无法正确定义TIME列的数据类型.
TIME,RESULT
03/24/2016 12:27:11 AM,2
03/24/2016 12:28:41 AM,76
03/24/2016 12:37:23 AM,19
03/24/2016 12:38:44 AM,68
03/24/2016 12:42:02 AM,44
...
Run Code Online (Sandbox Code Playgroud)
要读取csv文件,这是我写的代码:
raw_df = pd.read_csv('testresult.csv', index_col=None, parse_dates=['TIME'], infer_datetime_format=True)
这段代码有效,但速度非常慢,我认为infer_datetime_format需要时间.所以我首先尝试在csv中读取,然后使用to_datetime()将对象dtype'TIME'转换为datetime dtype,我希望通过定义格式,它可以加快速度.
raw_df = pd.read_csv('testresult.csv')
raw_df.loc['NEWTIME'] = pd.to_datetiem(raw_df['TIME'], format='%m/%d%Y %-I%M%S %p')
此代码抱怨错误"ValueError:' - '格式为'%m /%d%Y%-I%M%S%p'的错误指令"
请任何建议或提示都会有所帮助.
谢谢
我正在尝试计算相关矩阵,并根据p值过滤相关性,以找出高度相关的对。
为了解释我的意思,请说我有一个这样的数据框。
df
A B C D
0 2 NaN 2 -2
1 NaN 1 1 1.1
2 1 NaN NaN 3.2
3 -4 NaN 2 2
4 NaN 1 2.1 NaN
5 NaN 3 1 1
6 3 NaN 0 NaN
Run Code Online (Sandbox Code Playgroud)
为相关系数。我使用了pd.corr()。此方法可以处理具有NaN值的数据帧,更重要的是,它可以容忍具有0重叠的列对(列A和列B):
rho = df.corr()
A B C D
A 1.000000 NaN -0.609994 0.041204
B NaN 1.0 -0.500000 -1.000000
C -0.609994 -0.5 1.000000 0.988871
D 0.041204 -1.0 0.988871 1.000000
Run Code Online (Sandbox Code Playgroud)
挑战在于计算p值。我没有找到执行此操作的内置方法。但是,从具有统计意义的大熊猫列相关性中,@ BKay提供了一种计算p值的循环方法。如果重叠少于3个,此方法将报告错误。因此我通过添加错误异常进行了一些修改。
ValueError:零大小的数组,直到没有身份的最大缩减操作
pval = rho.copy()
for i …Run Code Online (Sandbox Code Playgroud) 我想读取 .yaml 文件以获取 Rmarkdown 报告的 yaml 参数。原来我有一个 yaml 标头来定义向量。
---
params:
ids: !r c(2455, 2490)
---
Run Code Online (Sandbox Code Playgroud)
它有效,其中params$ids是向量。
但是,如果我放入ids: !r c(2455, 2490)一个report_params.yaml文件中,并通过以下方式读取该 yaml 文件
report_params <- yaml::read_yaml("report_params.yaml")
Run Code Online (Sandbox Code Playgroud)
nowreport_params$ids是一个字符串'c(2455, 2490)'。那么我错过了什么,我应该如何解决这个问题?