#!/usr/bin/env python3
from numba import njit, prange
import time
@njit(parallel=True, fastmath=True, cache=False)
def calc_pi(num_steps):
x, sum1 = 0.0, 0.0
step1 = 1.0 / num_steps
for i in prange(num_steps):
x = (i + 0.5) * step1
sum1 = sum1 + 4.0 / (1.0 + x * x)
return sum1 * step1
calc_pi(1) # minus jit compilation time
start_time = time.time()
pi = calc_pi(1000000000)
msvcr = time.time() - start_time
print(f"--- {msvcr} seconds --- The value of PI is {pi}")
为了在C语言中进行比较。
#include <stdio.h>
#include <time.h>
int main()
{
int num_steps = 1000000000;
double step;
clock_t start;
clock_t stop;
start = clock();
double x, pi, sum=0.0;
step = 1.0/(double)num_steps;
for (int i = 0; i<num_steps; i++)
{
x = (i + .5) * step;
sum = sum + 4.0 / (1.0 + x * x);
}
pi = sum*step;
stop = clock();
printf("The value of PI is %1.12f \n", pi);
printf("The time to calculate PI was %5.3f seconds \n", ((double)(stop - start)/CLOCKS_PER_SEC));
return0;
}
现在移到了这个主题。
我也在学习Python,但只是作为掌握神经网络、机器学习和其他花哨的东西和软件包的一部分。 我认为不可能用这个超级大脑工作,它比MQL5慢200倍,我引用了一些简单测试的结果。
我还是不明白,是否有可能连接Python模块并从MQL5调用函数?或者只是Python->MQL5?
恕我直言,你只是不知道如何准备它。重做了你的例子。
在Python中。
这都是在一个古老的AMD Athlon(tm) 64 X2双核处理器4200+计算器上进行的,我想在MQL5上的数值会在12秒左右。
(我不知道如何在linux上运行MQL代码)。
因此,使用jit编译器的Python比C(mql)多出2倍!如果我在现代的8核CPU上运行它,它将多出8倍,仅仅是因为它是多线程的。
但即使在一个线程中,Python的结果也是9.6秒--所以它仍然更快。而且你也可以在有CUDA的显卡上运行它。
例如,我不能在C或MQL中写多线程的类似物--我将不能写loky、race和crash,另外,代码将大得多。
向MetaTrader的开发者提问:你们是否打算增加从Python中调用交易函数?
我还想在Python中设置一个函数来订阅来自终端的tick事件,所以当tick出现时,信息将被发送到Python。
我知道这些功能有第三方开发,但我希望能开箱即可使用。
你也可以尝试用GoLang写多线程代码来玩,在单线程中,它的速度与C语言相当。mql5
虚拟机 上的i7,分配2个核心,4个线程
你有什么样的处理器? 用C语言运行我的代码,与之比较。
如果是i7,它可能比我的AMD快25倍,甚至更多。我需要一个相同语言的报告点的测试。
你有什么样的处理器? 用c语言运行我的代码来进行比较。
C
虚拟机上的i7,分配2个核心,4个线程
派
i7在Linux上,4个核心,8个线程
伟大的结果!而且很快就写好了。任何说python很慢的人都可以在这里看到测试结果。
在你的处理器上用一个线程运行更多的Python代码(并行=False)。
为了进行全面的测试。
遗憾的是,在过去的15年里,数字计算者只上升了大约12倍,我以为现代的CPU更快。(平行 = 假)
伟大的结果!而且很快就写好了。任何说python很慢的人都可以在这里看到测试结果。
在你的处理器上用一个线程运行更多的Python代码(并行=False)。
对于一个完整的测试。
他们很久以前就发布了,但他们更喜欢将其与纯Python进行比较,这毫无意义)纯Python是为其他目的设计的。