小编guy*_*345的帖子

`concurrent.futures`中`with`的函数

下面的代码通过将总完成时间返回几乎为零来按预期执行,因为它不会等待线程完成每个作业。

import concurrent.futures
import time

start = time.perf_counter()


def do_something(seconds):
    print(f'Sleeping {seconds} second(s)...')
    time.sleep(seconds)
    return f'Done Sleeping...{seconds}'



executor= concurrent.futures.ThreadPoolExecutor()
secs = [10, 4, 3, 2, 1]

fs = [executor.submit(do_something, sec) for sec in secs]


finish = time.perf_counter()

print(f'Finished in {round(finish-start, 2)} second(s)')
Run Code Online (Sandbox Code Playgroud)

但是使用with命令它确实等待:

with concurrent.futures.ThreadPoolExecutor() as executor:
    secs = [10, 4, 3, 2, 1]

    fs = [executor.submit(do_something, sec) for sec in secs]
Run Code Online (Sandbox Code Playgroud)

为什么?with多线程具有这种行为的原因是什么?

python multithreading python-multithreading python-3.x

6
推荐指数
1
解决办法
279
查看次数

SARIMAX 模拟可能的路径

我正在尝试创建随机过程的可能路径的模拟,该过程不锚定到任何特定点。例如,将SARIMAX模型拟合到天气温度数据,然后使用该模型来模拟温度。

这里我使用页面中的标准演示statsmodels作为一个更简单的示例:

import numpy as np
import pandas as pd
from scipy.stats import norm
import statsmodels.api as sm
import matplotlib.pyplot as plt
from datetime import datetime
import requests
from io import BytesIO
Run Code Online (Sandbox Code Playgroud)

拟合模型:

wpi1 = requests.get('https://www.stata-press.com/data/r12/wpi1.dta').content
data = pd.read_stata(BytesIO(wpi1))
data.index = data.t
# Set the frequency
data.index.freq="QS-OCT"

# Fit the model
mod = sm.tsa.statespace.SARIMAX(data['wpi'], trend='c', order=(1,1,1))
res = mod.fit(disp=False)
print(res.summary())
Run Code Online (Sandbox Code Playgroud)

创建模拟:

res.simulate(len(data),  repetitions=10).plot();
Run Code Online (Sandbox Code Playgroud)

这是历史:

在此输入图像描述

这是模拟:

在此输入图像描述

模拟曲线分布广泛且彼此分离,因此这是没有意义的。最初的历史进程并没有那么大的差异。我理解错了什么?如何进行正确的模拟?

python stochastic-process statsmodels autoregressive-models arima

3
推荐指数
1
解决办法
453
查看次数