GVKun编程网logo

与Flask服务器同时运行while循环(flask服务器部署 hello)

38

在本文中,我们将为您详细介绍与Flask服务器同时运行while循环的相关知识,并且为您解答关于flask服务器部署hello的疑问,此外,我们还会提供一些关于C语言循环结构(while循环,for循

在本文中,我们将为您详细介绍与Flask服务器同时运行while循环的相关知识,并且为您解答关于flask服务器部署 hello的疑问,此外,我们还会提供一些关于C语言循环结构(while循环,for循环,do…while循环)、do while循环,C语言do while循环详解、flask 设置https请求 访问flask服务器、for循环vs while循环与foreach循环PHP的有用信息。

本文目录一览:

与Flask服务器同时运行while循环(flask服务器部署 hello)

与Flask服务器同时运行while循环(flask服务器部署 hello)

我正在使用python更新一些LED。我一直在这样做:

from LEDs import *myLEDs = LEDs()done = Falsewhile not done:  myLEDs.iterate()

我想用Flask充当一些我可以在我的浏览器中运行的ReactJS前端(以更改当前模式等)与Python中的LED控制代码之间的桥梁。

我的Flask工作正常,可以处理HTTP请求,等等。我想知道如何设置myLEDs.iterate()我的flask应用程序同时连续运行(或快速运行),同时仍然能够相互通信,就像这样:

myLEDs = LEDs()@app.route(''/changePattern'',methods=[''POST''])def changePattern():  n = request.json[''num'']  myLEDs.setPattern(n)  return jsonify(**locals())if __name__ == ''__main__'':  app.debug = True  myLEDs.setToFrequentlyIterateAndStillTalkToFlask()  app.run()

我遇到了celery,这似乎可以解决问题,但对于我的问题有多简单,似乎也有些过头了。

使用Flask overkill只是为了让UI管理我的python后端代码吗?是否有比Celery更简单的库可用于在后台运行某些内容?

答案1

小编典典

使用多进程在Flask HTTP请求的不同进程中运行循环:

import timefrom flask import Flask, jsonifyfrom multiprocessing import Process, Valueapp = Flask(__name__)tasks = [   {      ''id'': 1,      ''title'': u''Buy groceries'',      ''description'': u''Milk, Cheese, Pizza, Fruit, Tylenol'',       ''done'': False   },   {      ''id'': 2,      ''title'': u''Learn Python'',      ''description'': u''Need to find a good Python tutorial on the web'',       ''done'': False   }]@app.route(''/todo/api/v1.0/tasks'', methods=[''GET''])def get_tasks():   return jsonify({''tasks'': tasks})def record_loop(loop_on):   while True:      if loop_on.value == True:         print("loop running")      time.sleep(1)if __name__ == "__main__":   recording_on = Value(''b'', True)   p = Process(target=record_loop, args=(recording_on,))   p.start()     app.run(debug=True, use_reloader=False)   p.join()

任务部分来自这里,来自我的多处理代码。
注意“ use_reloader = False”部分。这是避免两次运行循环所必需的。由于这个原因,请看这里

可以通过使用以下命令启动服务器来测试功能

python <your_name_for_the example>.py

并打电话

curl -i http://localhost:5000/todo/api/v1.0/tasks

C语言循环结构(while循环,for循环,do…while循环)

C语言循环结构(while循环,for循环,do…while循环)

使用循环可以多次重复地执行多条语句,这里的“多条语句”称为循环体在C语言中,可以使用三种循环,分别是:while、do...while和for。

在这些语句中,循环体被重复执行的次数由循环条件控制,称为控制表达式(controlling expression)。这是一个标量类型的表达式,也就是说,它属于一个算术表达式或指针表达式。如果控制表达式的值不等于 0,循环条件为 true,反之,循环条件为 false。

语句 break 和 continue 用于在一次循环还未执行完时,跳转出循环或返回到循环头部。

while 循环

只要控制表达式为 true,while 循环就会反复地执行语句:

while (表达式)语句


while 表达式是顶部驱动(top-driven)的循环:先计算循环条件(也就是控制表达式)。如果为 true,就执行循环体,然后再次计算控制表达式。如果控制表达式为 false,程序跳过循环体,而去执行循环体后面的语句。

从语法上讲,循环体只有一条语句组成。如果需要执行多条语句时,可以使用语句块把它们组合在一起。例 1 展示了一个简单的 while 循环,从控制台读入多个浮点数,并把它们累加。

例 1 展示了一个简单的 while 循环,从控制台读入多个浮点数,并把它们累加。

【例1】一个 while 循环
/* 从键盘输入数字,然后输出它们的平均值
* -------------------------------------- */
#include <stdio.h>
int main()
{
   double x = 0.0,sum = 0.0;
   int count = 0;
   printf( "\t--- Calculate Averages ---\n" );
   printf( "\nEnter some numbers:\n"
           "(Type a letter to end your input)\n" );
   while ( scanf( "%lf",&x ) == 1 )
   {
      sum += x;
      ++count;
   }
   if ( count == 0 )
     printf( "No input data!\n" );
   else
     printf( "The average of your numbers is %.2f\n",sum/count );
   return 0;
}

在例 1 中,只要用户输入一个小数,下面的控制表达式即为 true:
scanf( "%lf",&x ) == 1

然而,只要函数 scanf()无法将字符串输入转换成浮点数(例如,当用户键入字母 q 时),则 scanf()返回值 0(如果是遇到输入流的尾端或发生错误时,则返回值 -1,表示 EOF)。这时,循环条件为 false,程序将会跳出循环,继续执行循环体后面的 if 语句。

for 循环

和 while 一样,for 循环也是一个顶部驱动的循环,但是它包含了更多的循环逻辑,如下所示:

for ([表达式1];[表达式2];[表达式3])
    语句


在一个典型的 for 循环中,在循环体顶部,下述三个动作需要执行:

(1) 表达式 1:初始化
只计算一次。在计算控制表达式之前,先计算一次表达式 1,以进行必要的初始化,后面不再计算它。

(2) 表达式 2:控制表达式
每轮循环前都要计算控制表达式,以判断是否需要继续本轮循环。当控制表达式的结果为 false,结束循环。

(3) 表达式 3:调节器
调节器(例如计数器自增)在每轮循环结束后且表达式 2 计算前执行。即,在运行了调节器后,执行表达式 2,以进行判断。

例 2 展示了使用一个 for 循环初始化数组内每个元素的过程。

【例2】用 for 循环初始化数组
#define ARR_LENGTH 1000
/* ... */
long arr[ARR_LENGTH];
int i;
for ( i = 0; i < ARR_LENGTH; ++i )
    arr[i] = 2*i;

for 循环头部中的三个表达式可以省略一个或多个。这意味着 for 循环头部最短的形式是:
for ( ; ; )

如果没有控制表达式,则表示循环条件始终是 true,也就是说,这定义了一个死循环

下面所示的 for 循环,既没有初始化表达式,也没有调节器表达式,它与 while(表达式)语句含义是等效的:
for ( ;表达式; )

事实上,每个 for 循环都可以被改写成 while 循环,反之亦然。例如,例 2 的 for 循环可完全等效为下面的 while 循环:
i = 0;                             // 初始化计数器
while ( i < ARR_LENGTH )     // 循环条件
{
    arr[i] = 2*i;
    ++i;                        // 递增计数器
}

一般来说,当循环内有计数器或索引变量需要被初始化,并且在每次循环时需要调整它们的值时,最好使用 for 循环,而不是 while 循环。

在ANSI C99中,也可以使用声明来替代表达式1。在这种情况下,被声明变量的作用域被限制在 for 循环范围内。例如:
for ( int i = 0; i < ARR_LENGTH; ++i )
    arr[i] = 2*i;

变量 i 被声明在该 for 循环中(与例 2 不同)for 循环结束之后,变量 i 将不会再存在。

逗号运算符常常被用在 for 循环头部,以在表达式 1 中实现多个初始化操作,或者在表达式 3 对每个变量做调整操作。例如,函数 strReverse()使用两个索引变量以保存字符串中字符的次序:
void strReverse( char* str)
{
  char ch;
  for ( size_t i = 0,j = strlen(str)-1; i < j; ++i,--j )
    ch = str[i],str[i] = str[j],str[j] = ch;
}

借助于逗号运算符,可以在只允许出现一个表达式的地方,计算多个表达式。

do...while 循环

do...while 循环是一种底部驱动的循环

do 语句 while (表达式);


在控制表达式被第一次计算之前,循环体语句会首先被执行一次。与 while 和 for 循环不同,do...while 循环会确保循环体语句至少执行一次。如果控制表达式的值为 true,那么另一次循环就会继续;如果是 false,则循环结束。

在例 3 中,读入与执行命令的函数至少会被调用一次。当使用者离开菜单系统,函数 getCommand()将返回常量 END 的值。

【例3】do···while
// 读入和执行所选的菜单命令
// --------------------------------------------
int getCommand( void );
void performCommand( int cmd );
#define END 0
/* ... */
do
{
  int command = getCommand();   // 询问菜单系统
  performCommand( command );    // 执行所选的菜单命令
} while ( command != END );

例 4 展示了标准库函数 strcpy()的一个版本,循环体仅为一条简单的语句,而不是一个语句块。因为在循环体执行之后才计算循环条件,所以字符串终止符'\0'也会被复制。

【例4】函数 strcpy()使用 do...while
// 将字符串2复制到字符串1
// ----------------------------
char *strcpy( char* restrict s1,const char* restrict s2 )
{
  int i = 0;
  do
     s1[i] = s2[i];               // 循环体:复制每一个字符
  while ( s2[i++] != '\0' );      // 如果刚刚复制的是'\0',则结束循环
  return s1;
}

do while循环,C语言do while循环详解

do while循环,C语言do while循环详解

do…while 循环不经常使用,其主要用于人机交互。它的格式是:

do
{
    语句;
}
while (表达式);

注意,while 后面的分号千万不能省略。

do…while 和 while 的执行过程非常相似,唯一的区别是:“do…while 是先执行一次循环体,然后再判别表达式”。当表达式为“真”时,返回重新执行循环体,如此反复,直到表达式为“假”为止,此时循环结束。

现在问一个问题:你认为 while 和 do…while 是否等价?它们是否可以相互转换?我们前面讲,while 和 for 是完全等价的,它们是可以相互转换的。那 do…while 和 while、for 等价吗?它们可以相互转换吗?

答案是“不能”。原因十分简单,while 循环体内部不一定会执行,当表达式一开始就为假的时候它就不会执行。但 do…while 不管表达式开始为真还是为假,循环体内部都会先执行一次。

下面举个例子,设计一个计算“一元二次方程”的程序。运行的结果是让你输入三个数,然后计算结果,完了之后还会问你:“您想继续吗?”想继续的话可以再输入三个数,不想继续,输入“N”就退出。下面就来写这个程序:
# include <stdio.h>
# include <math.h>
int main(void)
{
    float a,b,c;  //定义一元二次方程的三个系数
    char k;  //用于后面判断是否要继续输入
    double delta,x1,x2;  /*delta用来存储b*b - 4*a*c的值;x1和x2的值分别为方程的解*/
    do
    {
        //输入一元二次方程的三个系数a、b、c
        printf("请输入一元二次方程的三个系数,用回车分隔:\n");
        printf("a = ");
        scanf("%f",&a);
        while(getchar() != '\n');  /*容错处理,scanf后面都加上这一句,作用是清空输入缓冲区,以防用户乱输入*/
        printf("b = ");
        scanf("%f",&b);
        while(getchar() != '\n');
        printf("c = ");
        scanf("%f",&c);
        while(getchar() != '\n');
        delta = b*b - 4*a*c;
        //判断delta的值是大于零,等于零,还是小于零
        if (delta > 0)
        {
            x1 = (-b +sqrt(delta)) / (2*a);
            x2 = (-b -sqrt(delta)) / (2*a);
            printf("有两个解,x1 = %f,x2 = %f\n",x2);
        }
        else if (0 == delta)
        {
            x1 = x2 = (-b) / (2*a);
            printf("有唯一解,x1 = x2 = %f\n",x1);
        }
        else
        {
            printf("无实数解\n");
        }
        //询问是否想继续输入
        printf("您想继续吗,Y想,N不想:");
        scanf("%c",&k);  //输入Y或者N,表示“想”或“不想”
        while(getchar() != '\n');
    }
    while ('Y' == k);
    return 0;
}
输出结果是:
请输入一元二次方程的三个系数,用回车分隔:
a = 1
b = 5
c = 6
有两个解,x1 = -2.000000,x2 = -3.000000
您想继续吗,N不想:Y
请输入一元二次方程的三个系数,用回车分隔:
a = 2
b = 3
c = 4无实数解
您想继续吗,N不想:N

程序中,“while(getchar()!='\n');”是 getchar() 的高级用法,作用是彻底地清空输入缓冲区。getchar() 每次从缓冲区中取出一个字符,只要取出的字符不是回车就一直取,这样就将缓冲区中所有的垃圾字符都取出来了。

此外,do…while(1) 和 while(1) 虽然不等价,但是在功能上可以互换,因为反正是无限制循环,所以不管是先执行一次循环体再判断,还是先判断再执行循环体结果都一样。但如果 while 后面的表达式不是 1,那就不能相互替换。大家看上面这个程序,do…while 中不是 do…while(1),而是 do…while('Y'==k),即只有 'Y'==k 才执行循环,但只有先执行一次循环体才知道变量 k 中存储的是什么,才能执行最后的 while('Y'==k),这样就无法用 while(1) 来替代。因此 do…while 一般的使用场合为 while 后的表达式不为 1。

这就是人机交互,用户与机器里面的一个程序进行相互交流:机器给一个提示,用户输入一个值,然后机器再将结果返回给用户,然后再给你一个提示……就这样一步一步执行。do…while 主要用于人机交互,在其他地方都用得很少。

flask 设置https请求 访问flask服务器

flask 设置https请求 访问flask服务器

 

学习过程中想要学教程中一样,做个假的微信公众号推送,不过去了微信开发文档怎么一直说需要https的请求(教学中没有说需要https,一直是http)

 

但是我的服务器只能使用http请求访问,如果硬是要在url中添加https 则会显示没有这个网站

 

于是我就想法让https请求也能请求到我的服务器域名上  

我的域名是在阿里云买的,所以我就直接在阿里云上购买了证书,购买使用的是免费的1年证书

流程如下

 

 

购买之后显示,但是还没有绑定域名,所以需要申请证书绑定这个域名

 

点击申请,根据弹出的页面进行一个填写    我买的域名是 www.zengyimin.xyz  

根据下一步不断填写信息,等待审核,出现如下画面表示绑定域名成功

点击下载 ,会下载一个压缩包 

包名是绑定的域名

包中含有pem和key 证书和密匙,解压

接下来在放置 nginx 的服务器上进行操作 ,进入nginx的配置目录 (我是ubuntu) 

cd /etc/nginx 

该目录新建一个文件夹 放置证书和key

mkdir cert

将解压的文件上传至该文件夹

 

 进入nginx的配置文件 (我的nginx版本不同,有些操作和你们不同,以下我的个人讲解你们看看就好 )

 其中nginx.conf 是全部的配置文件集合, sites-acailable 和 siter-enabled  文件夹含有一些服务器的配置

 如果你在sites中配置完成,启动nginx 时                   nginx会带上nginx.conf 配置文件启动,配置文件会include导入 sites 中的配置文文件

 

 同时sites 中的文件貌似是镜像文件? 更改一个另一个也会变

 

我的配置文件 进入  sites-enabled         vim更改配置文件 default

 

 这是我原本 http 80 端口的server服务配置         http不需要证书,所以不需要证书设置

 

 https 443 的配置 ,在该文件中添加一个 server 服务

 

 

 重启ngxin     

service nginx restart    

 

可以尝试在url中使用https请求nginx绑定的域名(我是一台机,其实就是flask服务器绑定的域名)了

免费证书会在google浏览器访问时提示有问题,所以需要证书还是购买有服务的比较好

http://www.zengyimin.xyz/api/v1.0/log   

https://www.zengyimin.xyz/api/v1.0/log

 

 

 

都是一样的访问,不过http和https的请求都能请求,区别也不大... 

 

除非用户输入http请求会自动跳转https的请求

所以我个人的最终方案

 

# 所有的往http80端口的请求都会被 rewrite 进行一个拦截 重定向 将http 请求改为https  

server {                                 listen
80; server_name www.zengyimin.xyz; rewrite ^(.*)$ https://$host$1 permanent;      # <----------------- 重点 这是重定向 location / { index index.html index.htm; } }
# 这是新增的 https 的server server { listen
443; server_name www.zengyimin.xyz; ssl on;                           root html; index index.html index.htm; ssl_certificate cert/2568867_www.zengyimin.xyz.pem;      # 证书 ssl_certificate_key cert/2568867_www.zengyimin.xyz.key;    # 密匙 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:5001;            # https请求转发到服务器ip地址 proxy_redirect off; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }

 

 

最终所有前往nginx服务器的请求都会被重定向到https请求

 

 

 

https://help.aliyun.com/document_detail/98728.html?spm=5176.2020520163.0.0.7bb9d5OKd5OKj5

 https://lufficc.com/blog/configure-nginx-as-a-web-server

for循环vs while循环与foreach循环PHP

for循环vs while循环与foreach循环PHP

首先我是 PHP的新手我一直在使用for循环,while循环,foreach循环在脚本中.我在想

哪一个更好的表现?
>选择循环的标准是什么?
>当我们循环在另一个循环中时应该使用哪个?

我被卡住的代码,想知道要使用哪个循环.

for($i=0;$i<count($all);$i++)
{
 //do some tasks here
 for($j=0;$j<count($rows);$j++)
 {
  //do some other tasks here 
 }
}

很明显,我可以使用while编写上述代码.希望有人能帮助我找出应该使用哪个循环.

which one is better for performance?

没关系

what’s the criteria to select a loop?

如果您只需要遍历对象或数组的所有元素,请使用foreach.您需要的案例包括

>当你明确地需要用数字索引做事情时,例如:
>当您需要在迭代中使用上一个或下一个元素
>当您需要在迭代期间更改计数器

foreach更方便,因为它不需要您设置计数,并且可以通过任何类型的成员工作 – 无论是对象属性还是关联数组元素(不能捕获).通常最好的可读性.

which should be used when we loop inside another loop?

两者都很好在您的演示案例中,foreach是最简单的方式.

我们今天的关于与Flask服务器同时运行while循环flask服务器部署 hello的分享已经告一段落,感谢您的关注,如果您想了解更多关于C语言循环结构(while循环,for循环,do…while循环)、do while循环,C语言do while循环详解、flask 设置https请求 访问flask服务器、for循环vs while循环与foreach循环PHP的相关信息,请在本站查询。

本文标签: