进程外Session

三种Session
1.InProc(进程内)-Asp.Net默认就是这种

优点:速度快

缺点:但内存小,存储有限,易爆满导致重启数据丢失

 

进程外:可以在IISASPNET服务意外关闭时继续保持状态,注意此时存储到session中的对象必须支持序列化

2.StateServer:使用aspnet_state.exe

2.1开启服务:我的电脑-管理-服务与应用程序-服务-ASP.NET State Service(ASP.NET 状态服务)

           2.2修改配置文件:
                  <system.web>节点中添加<sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424"/>ASP.NET 状态服务端口号默认:42424

2.3ASP.NET 状态服务只限本机使用如果需要保存外部的Session需要修改注册表

                  设置是否允许远程使用,位置:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
                  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRenoteConnection 值改为 1

测试代码如下:

using System;
namespace WebForm {
    public partial class OutSession : System.Web.UI. Page {
        protected void Page_Load( object sender, EventArgs e) {
            if (Session["key" ] != null) {
                Person p = (Person )Session[ "key"];
                Response.Write(p.GetName());
            } else {
                Session[ "key" ] = new Person( "piziyimao" );
            }
        }
    }
    [ Serializable] //必须是可序列化的类
    public class Person {
        public Person(string n) {
            name = n;
        }
        private string name;
        public string GetName() {
            return name;
        }
    }
}

Web.Config

<? xml version =" 1.0 "?>
< configuration>
       < system.web >
              < compilation debug = "true " targetFramework = "4.0 " />
        < sessionState mode = "StateServer "
                      stateConnectionString =" tcpip=localhost:42424 "/>
       </ system.web >
       < connectionStrings >
              < add name = "ConnStr " connectionString =" server=.;database=School;uid=sa;pwd=123456 " />
       </ connectionStrings >
</ configuration>

3.SQLServer

           3.1使用aspnet_regsql.exe运行Session数据库脚本脚本路径C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319

                 临时储存区:InstallSqlState.sql & UninstallSqlState.sql

                永久储存区:InstallPersistSqlState.sql & UninstallPersistSqlState.sql(InstallPersistSqlState需要使用ASPState数据库  需自己创建)

3.2修改配置文件如下:

<? xml version =" 1.0 "?>
< configuration>
       < system.web >
              < compilation debug = "true " targetFramework = "4.0 " />
        < sessionState mode = "SQLServer"/>
       </ system.web >
       < connectionStrings >
              < add name = "ConnStr " connectionString =" server=.;database=School;uid=sa;pwd=123456 " />
       </ connectionStrings >
</ configuration>

 


<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
在多进程环境下使用 TensorFlow 的 `tf.Session` 需要特别注意一些限制和最佳实践,以避免资源冲突、性能下降或程序崩溃。以下是一些关键点和推荐做法: ### 1. 在子进程中独立创建 Session 和计算图(Graph) TensorFlow 的 `tf.Graph` 和 `tf.Session` 不是线程安全的,也不支持跨进程共享。因此,在多进程环境中,每个进程都应拥有独立的 `tf.Graph` 和 `tf.Session` 实例。通常的做法是在每个子进程中重新定义模型并创建新的会话[^3]。 示例代码如下: ```python import tensorflow as tf import multiprocessing as mp def worker(): with tf.Graph().as_default() as g: with g.device("/cpu:0"): a = tf.constant(3.0) b = tf.constant(4.0) c = a * b with tf.Session() as sess: result = sess.run(c) print(f"Result in worker process: {result}") if __name__ == "__main__": mp.set_start_method('fork') # 或 'spawn',根据平台支持选择 processes = [] for _ in range(4): p = mp.Process(target=worker) p.start() processes.append(p) for p in processes: p.join() ``` ### 2. 使用 `set_start_method` 指定启动方式 在某些操作系统上(如 Windows),默认的进程启动方式为 `'spawn'`,而在 Linux 上默认为 `'fork'`。为了确保 TensorFlow 能够正确初始化设备和运行时环境,建议显式设置启动方式,例如使用 `'spawn'` 来避免因继承父进程状态而引发的问题[^3]。 ```python mp.set_start_method('spawn') ``` ### 3. 配置 SessionOptions 以优化多进程行为 可以通过 `tf.ConfigProto` 设置 `SessionOptions` 来控制会话的行为,例如限制使用的 CPU 核心数或 GPU 设备,防止多个进程争抢资源导致性能下降[^4]。 示例配置如下: ```python config = tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1, device_count={"GPU": 0}) # 禁用 GPU with tf.Session(config=config) as sess: ... ``` ### 4. 避免在主进程中创建 Session 后再 fork 子进程 如果在主进程中创建了 `tf.Session` 或 `tf.Graph`,然后调用 `multiprocessing.Process` 创建子进程,可能会出现异常,尤其是在使用 GPU 时。这是因为某些设备驱动(如 CUDA)不支持在 fork 出来的子进程中使用已打开的上下文。因此,应在每个子进程中独立构建图和会话。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值